我在Storyboard上创建了一个带有一个UITextField的自定义UIViewController。在viewDidLoad
上,我将UITextFIeld设置为becomeFirstResponder
,没有任何反应(没有弹出键盘)。
然后我尝试调用resignFirstResponder()
,但它返回false。接下来,我尝试使用@ Get the current first responder without using a private API上的代码通过循环所有子视图来查找first responder
的用户。事实证明,没有任何子视图是第一响应者。
故事板中的我的ViewController
我的代码
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'键盘出现!!!我有一件事就是自动布局,但我不确定这是否会影响键盘的弹出。
答案 0 :(得分:19)
我刚刚通过调用self.tf.becomeFirstResponder()
indside viewDidLoad()
函数对文本字段进行了测试,其工作非常正常。您需要通过按命令+ K 来切换键盘,如nflacco所指出的那样,并禁用模拟器中的硬件键盘:
答案 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()
}
有时错误的是渲染视图的时间