让我们说我的应用中有2个文本字段。第一个Textfield是输入电子邮件(键盘显示),第二个Textfield是针脚(不需要显示任何键盘)。
当我点击第一个文本字段时键盘出现,然后我按下第二个文本字段(这将传递到另一个UI和控制器)以输入PIN。所以它在不同的页面上,我使用Protocol来传递控制器之间的值。
我已经实现了self.view.endEditing(true),如果我按下UI中的任何地方来解除键盘,这项工作正常。
问题是,当我点击第一个文本字段&在UI上随处点击第二个,而不是点击。来自第一个文本字段的键盘不会自动解除并且停留在另一个控制器&页。
那么如何禁用第二个textview的键盘。因为我最终不需要它。
这里的代码很少。
此代码是在我编辑第二个文本字段时自动定位到另一个控制器。
//Implement UITextFieldDelegate
extension LoginViewController: UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "EnterMpinViewController") as! EnterMpinViewController
secondViewController.pinProtocol = self
textField.resignFirstResponder()
self.navigationController?.pushViewController(secondViewController, animated: true)
}
答案 0 :(得分:0)
TextField具有自定义输入的InputView属性,这应该是这种情况的理想选择,因为您还需要安全输入引脚。
我在下面编写了代码片段,以说明如何使用输入视图。
UIKit框架包括对自定义输入视图和输入的支持 配件视图。您的应用可以替换自己的输入视图 用户在视图中编辑文本或其他形式的数据时的系统键盘。 例如,应用程序可以使用自定义输入视图来输入字符 来自一个符文字母。
import UIKit
class ViewController: UIViewController {
var textField: UITextField?
override func viewDidLoad() {
super.viewDidLoad()
textField = UITextField()
textField?.isSecureTextEntry = true
textField?.textColor = UIColor.blue
textField?.frame = CGRect.init(x: 10, y: 100, width: 200, height: 200)
view.addSubview(textField!)
textField?.inputView = view
textField?.reloadInputViews()
let btn1: UIButton = UIButton()
btn1.frame = CGRect.init(x: 10, y: 350, width: 40, height: 40)
btn1.setTitle("1", for: UIControlState.normal)
btn1.addTarget(self, action: #selector(btn1Tap), for: UIControlEvents.touchUpInside)
view.addSubview(btn1)
view.backgroundColor = UIColor.lightGray
}
func btn1Tap(btn1: UIButton) {
textField?.text = btn1.currentTitle;
}
}
答案 1 :(得分:0)
实现UITextField Delegate方法,如果textfield是您的另一个文本字段,则返回false
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField == yourAnotherTextFiled {
return false
}
return true
}
答案 2 :(得分:0)
尝试这样可能对你有所帮助
let when = DispatchTime.now() + 2 // change 2 to desired number of seconds
self.view.endEditing(true)
DispatchQueue.main.asyncAfter(deadline: when) {
// Your code with delay
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "EnterMpinViewController") as! EnterMpinViewController
secondViewController.pinProtocol = self
self.navigationController?.pushViewController(secondViewController, animated: true)
}