点击另一个UITextField后自动禁用键盘

时间:2017-05-26 08:41:18

标签: ios swift swift3 uikeyboard

让我们说我的应用中有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)

}

3 个答案:

答案 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)
    }