Swift:成为UITextField上的第一响应者?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:成为UITextField上的第一响应者?相关的知识,希望对你有一定的参考价值。
我在Storyboard上创建了一个带有一个UITextField的自定义UIViewController。在viewDidLoad
上,我将UITextFIeld设置为becomeFirstResponder
,没有任何反应(没有键盘弹出)。
然后我尝试调用resignFirstResponder()
,但它返回false。接下来,我尝试使用@ first responder
上的代码通过循环所有子视图来找到Get the current first responder without using a private API是谁。事实证明,没有一个子视图是第一个响应者。
我的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.
}
}
就这么简单......为什么不是键盘出现!!!我有一件事是自动布局,但我不确定这是否会影响键盘弹出。
我只是通过调用self.tf.becomeFirstResponder()
indside viewDidLoad()
函数测试它的文本字段,它的工作非常好。您需要通过按下命令+ K来切换键盘,如nflacco刚刚指出并禁用模拟器中的硬件键盘:
- ios模拟器 - >硬件 - >键盘
- 取消选中“连接硬件键盘”
Swift 4它对我有用 试试吧
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DispatchQueue.main.async {
self.textView.becomeFirstResponder()
}
}
我认为
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
在我的情况下,没有我尝试过的东西,在我尝试之前我无法设置第一响应者。
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()
}
}
}
希望这有助于有人遇到同样的问题。
以上是关于Swift:成为UITextField上的第一响应者?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 如何让所有 uiTextfield 上的第一响应者辞职
UITextField 不能成为 UITableView 中的第一响应者