gpt4 book ai didi

ios - 如何在 iOS 内置键盘上单击删除按钮时移动到上一个 TextField

转载 作者:行者123 更新时间:2023-11-30 10:24:17 25 4
gpt4 key购买 nike

我正在构建一个 iOS 应用程序,它要求用户输入由 4 位数字组成的 PIN 码。因此,我分别创建了 4 个 TextField,以便每个 TextField 接受一个数字。当用户输入每个文本字段并顺利地从文本字段移动到另一个文本字段时,它工作正常。

但问题是我希望用户能够通过单击 iOS 内置键盘提供的清除按钮图标来删除。当用户单击该图标按钮时,它应该让文本字段移动到上一个文本字段,但它对我不起作用。

我在 stackoverflow 上找到了很多在线资源,但它仍然不适合我。这就是为什么我创建了自己的问题。

这就是我的代码的样子!我以编程方式创建了文本字段!

self.coverView.addSubview(self.paymentView.firstDigit)
self.coverView.addSubview(self.paymentView.secondDigit)
self.coverView.addSubview(self.paymentView.thirdDigit)
self.coverView.addSubview(self.paymentView.fourthDigit)

self.view.addSubview(self.overlayView)
self.overlayView.snp.makeConstraints { (make) in
make.top.width.height.centerX.equalTo(self.coverView)
}
self.paymentView.firstDigit.becomeFirstResponder()


self.paymentView.firstDigit.snp.makeConstraints { (make) in
make.top.equalTo(self.coverView)
make.width.height.equalTo(21)
make.leading.equalTo(self.coverView)
}
self.paymentView.secondDigit.snp.makeConstraints { (make) in
make.top.equalTo(self.coverView)
make.leading.equalTo(self.paymentView.firstDigit.snp.trailing).offset(8)
make.width.height.equalTo(21)
}
self.paymentView.thirdDigit.snp.makeConstraints { (make) in
make.top.equalTo(self.coverView)
make.leading.equalTo(self.paymentView.secondDigit.snp.trailing).offset(8)
make.width.height.equalTo(21)
}
self.paymentView.fourthDigit.snp.makeConstraints { (make) in
make.top.equalTo(self.coverView)
make.leading.equalTo(self.paymentView.thirdDigit.snp.trailing).offset(8)
make.width.height.equalTo(21)
}

self.paymentView.firstDigit.delegate = self
self.paymentView.secondDigit.delegate = self
self.paymentView.thirdDigit.delegate = self
self.paymentView.fourthDigit.delegate = self

上面的代码包含 TextField 的委托(delegate)。下面是我如何为每个 TextField 设置目标

self.paymentView.firstDigit.addTarget(self, action: #selector(textfieldDidChange(textField:)), for: .editingChanged)
self.paymentView.secondDigit.addTarget(self, action: #selector(textfieldDidChange(textField:)), for: .editingChanged)
self.paymentView.thirdDigit.addTarget(self, action: #selector(textfieldDidChange(textField:)), for: .editingChanged)
self.paymentView.fourthDigit.addTarget(self, action: #selector(textfieldDidChange(textField:)), for: .editingChanged)

下面是textfieldDidChange的函数

 @objc func textfieldDidChange(textField: UITextField) {
let text = textField.text
print("This is an amount of text ", text?.count)
if text?.count == 1 {
switch textField {
case self.paymentView.firstDigit:
self.paymentView.firstDigit.textColor = BaseColor.colorPrimary
self.paymentView.firstDigit.backgroundColor = BaseColor.colorPrimary
self.paymentView.secondDigit.becomeFirstResponder()

case self.paymentView.secondDigit:
self.paymentView.secondDigit.textColor = BaseColor.colorPrimary
self.paymentView.thirdDigit.becomeFirstResponder()
self.paymentView.secondDigit.backgroundColor = BaseColor.colorPrimary

case self.paymentView.thirdDigit:
self.paymentView.thirdDigit.textColor = BaseColor.colorPrimary
self.paymentView.fourthDigit.becomeFirstResponder()
self.paymentView.thirdDigit.backgroundColor = BaseColor.colorPrimary

case self.paymentView.fourthDigit:
self.paymentView.fourthDigit.textColor = BaseColor.colorPrimary
self.paymentView.fourthDigit.backgroundColor = BaseColor.colorPrimary
self.paymentView.fourthDigit.resignFirstResponder()
self.view.endEditing(true)
default:
break
}
}
if text?.count == 0 {
switch textField {
case self.paymentView.firstDigit:
self.paymentView.firstDigit.becomeFirstResponder()
self.paymentView.firstDigit.backgroundColor = .red
case self.paymentView.secondDigit:
self.paymentView.firstDigit.becomeFirstResponder()
self.paymentView.firstDigit.backgroundColor = .red
case self.paymentView.thirdDigit:
self.paymentView.secondDigit.becomeFirstResponder()
self.paymentView.secondDigit.backgroundColor = .red
case self.paymentView.fourthDigit:
self.paymentView.thirdDigit.becomeFirstResponder()
self.paymentView.thirdDigit.backgroundColor = .red
default:
break
}
}
}

上面是我如何尝试在单击 iOS 内置键盘的清除按钮时使文本字段移动到上一个文本字段,但它没有移动。上面的代码是我从源 How to move cursor from one text field to another automatically in swift ios programmatically? 复制的

最佳答案

我已经处理过这个问题,只需按照以下步骤操作,您就会得到根据您的需要的结果:

 @IBOutlet weak var txt4: UITextField!
@IBOutlet weak var txt3: UITextField!
@IBOutlet weak var txt2: UITextField!
@IBOutlet weak var txt1: UITextField!

在 View Controller 中添加textField委托(delegate)

在viewDidLoad中分配委托(delegate):

  txt1.delegate = self
txt2.delegate = self
txt3.delegate = self
txt4.delegate = self

然后添加您想要的代码

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if (textField == txt1) {
txt2.becomeFirstResponder()
}else if (textField == txt2) {
txt3.becomeFirstResponder()
}else if (textField == txt3) {
txt4.becomeFirstResponder()
}else if (textField == txt4) {
//here

var str = self.txt1.text! + self.txt2.text! + self.txt3.text! + self.txt4.text!
str = str.replacingOccurrences(of: " ", with: "")
self.verify(otp: str)
// self.navigationController?.pushViewController(vc, animated: true)
}
return true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if(textField.text?.count == 0)
{
textField.text = " "
}
}

@objc func setNextResponder(textfield : UITextField)
{
textfield.becomeFirstResponder()

}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

let _char = string.cString(using: .utf8)
// const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
// int isBackSpace = strcmp(_char, "\b");
let isBackSpace = strcmp(_char, "\\b")

if (isBackSpace == -92) {
// NSLog(@"Backspace was pressed");



if (textField == txt4)
{
if(textField.text!.count == 2)
{

}
else{
self.perform(#selector(setNextResponder), with: txt3, afterDelay: 0.01)
txt3.text = " "
}
}
else if (textField == txt3)
{
if(textField.text!.count == 2)
{

}
else{
self.perform(#selector(setNextResponder), with: txt2, afterDelay: 0.01)
txt2.text = " "

}
}
else if (textField == txt2)
{
if(textField.text!.count == 2)
{

}
else{
self.perform(#selector(setNextResponder), with: txt1, afterDelay: 0.01)
txt1.text = " "
}
}
else if (textField == txt1)
{

if(textField.text!.count == 2)
{

}
else{
textField.resignFirstResponder()

}

}
}
if (string.count > 1 && !(Scanner.init(string: string).scanInt(nil)))
{
return false;
}

let oldLength = textField.text!.count
let replacementLength = string.count
let rangeLength = range.length
let newLength = oldLength - rangeLength + replacementLength


// This 'tabs' to next field when entering digits
if (newLength == 2) {
if (textField == txt1)
{
self.perform(#selector(setNextResponder), with: txt2, afterDelay: 0.01)

}
else if (textField == txt2)
{
self.perform(#selector(setNextResponder), with: txt3, afterDelay: 0.01)

}
else if (textField == txt3)
{
self.perform(#selector(setNextResponder), with: txt4, afterDelay: 0.01)

}
else if(textField == txt4)
{
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// let vc = self.storyboard?.instantiateViewController(withIdentifier: "navVC") as! NavigationViewController
// vc.modalPresentationStyle = .fullScreen
// self.present(vc, animated: true, completion: nil)
var str = self.txt1.text! + self.txt2.text! + self.txt3.text! + self.txt4.text!
str = str.replacingOccurrences(of: " ", with: "")
self.verify(otp: str)
}
}



}

return newLength <= 2;
}

关于ios - 如何在 iOS 内置键盘上单击删除按钮时移动到上一个 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60164119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com