Swift:成为UITextField上的第一响应者?

时间:2014-08-17 21:15:43

标签: ios swift storyboard uitextfield becomefirstresponder

我在Storyboard上创建了一个带有一个UITextField的自定义UIViewController。在viewDidLoad上,我将UITextFIeld设置为becomeFirstResponder,没有任何反应(没有弹出键盘)。

然后我尝试调用resignFirstResponder(),但它返回false。接下来,我尝试使用@ Get the current first responder without using a private API上的代码通过循环所有子视图来查找first responder的用户。事实证明,没有任何子视图是第一响应者。

故事板中的我的ViewController

enter image description here

我的代码

class BLTestViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        tf.becomeFirstResponder()
        // Do any additional setup after loading the view.
    }
}

尽可能简单......为什么ISN'键盘出现!!!我有一件事就是自动布局,但我不确定这是否会影响键盘的弹出。

6 个答案:

答案 0 :(得分:19)

我刚刚通过调用self.tf.becomeFirstResponder() indside viewDidLoad()函数对文本字段进行了测试,其工作非常正常。您需要通过按命令+ K 来切换键盘,如nflacco所指出的那样,并禁用模拟器中的硬件键盘:

  1. iOS模拟器 - >硬件 - >键盘
  2. 取消选中"连接硬件键盘"

答案 1 :(得分:7)

Swift 4对我有用
尝试

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.main.async {
        self.textView.becomeFirstResponder()
    }

}

答案 2 :(得分:5)

我认为

class BLTestViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        self.focustf()
        // Do any additional setup after loading the view.
    }

    func focustf(){
    self.tf.becomeFirstResponder()
    }
}

答案 3 :(得分:2)

Swift 4和iOS 11

在我的情况下,没有我尝试过的东西,在我尝试之前我无法设置第一响应者。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isKind(of: YOURTABLEVIEWCELL.self) {
        if let yourCell = cell as? YOURTABLEVIEWCELL{
            yourCell.yourUiTextField.becomeFirstResponder()
        }
    }
}

希望这有助于有人遇到同样的问题。

答案 4 :(得分:0)

按Command + Shift + K打开键盘。

答案 5 :(得分:0)

尝试

 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                    textField.becomeFirstResponder()
                }

有时错误的是渲染视图的时间