关于ios:Swift:成为UITextField的第一响应者不起作用?

Swift: Become First Responder on UITextField Not Working?

我在Storyboard上创建了一个带有一个UITextField的自定义UIViewController。 在viewDidLoad上,我将UITextFIeld设置为becomeFirstResponder,什么也没发生(没有弹出键盘)。

然后,我尝试调用resignFirstResponder(),但返回false。 接下来,我尝试通过使用@上的代码循环所有子视图来查找first responder是谁,而不使用私有API来获取当前的第一响应者。 事实证明,所有子视图都不是第一响应者。

故事板中的我的ViewController

enter image description here

我的密码

1
2
3
4
5
6
7
8
9
10
11
12
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.
    }
}

变得如此简单...为什么不是键盘来了!!! 我要做的一件事是自动布局,但是我不确定这是否会影响键盘弹出。


我只是通过调用self.tf.becomeFirstResponder() indside viewDidLoad()函数使用文本字段对其进行了测试,并且它的工作原理绝对不错。 您需要按nflacco所指出的那样,通过按Command + K来切换键盘,并在模拟器中禁用硬件键盘,如下所示:

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

  • Swift 4对我有用

    试试吧

    1
    2
    3
    4
    5
    6
    7
    8
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

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

    }


    我认为

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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()
        }
    }

    Swift 4和iOS 11

    就我而言,我没有尝试过,在尝试之前,我无法设置第一响应者。

    1
    2
    3
    4
    5
    6
    7
    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()
            }
        }
    }

    希望这可以帮助遇到同样问题的人。