我有一个UITableViewController
的子类,它显示了几行(确切地说是8行),其中顶行是包含UITextField
的自定义单元格。加载视图后,我通过调用becomeFirstResponder
上的textfield
立即弹出键盘。这一切都运行良好,直到我从 iOS 9 升级到 iOS 10 。现在视图跳到视图的底部,键盘覆盖了我的最后两行,我的TextField
离开了可见区域。当我注释掉becomeFirstResponder
电话时,跳跃消失了,但我当然失去了键盘弹出窗口。这就是我的代码看起来......
class UserProfileTableViewController: UITableViewController {
private var userInfoCell: UserInfoTableViewCell?
...
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section == 0 {
userInfoCell = tableView.dequeueReusableCellWithIdentifier("userInfoCell", forIndexPath: indexPath) as? UserInfoTableViewCell
if !editMode {
userInfoCell?.nameField.becomeFirstResponder()
}
return userInfoCell!
}
else if indexPath.section == 1 {
....
然后我的自定义表格视图单元格如下......
class UserInfoTableViewCell: UITableViewCell, UITextFieldDelegate,, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var photoImageView: UIImageView!
...
override func awakeFromNib() {
super.awakeFromNib()
// listen for when user touches a textfield
nameField.delegate = self
...
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
...
我尝试过的事情:
userInfoCell?.nameField.becomeFirstResponder()
viewWillAppear()
userInfoCell?.nameField.becomeFirstResponder()
viewDidAppear()
nameField.becomeFirstResponder()
。{/ li>中呼叫UserInfoTableViewCell.awakeFromNib()
tableView.scrollToRowAtIndexPath()
后致电userInfoCell?.nameField.becomeFirstResponder()
。 super.viewWillAppear()
viewWillAppear()
醇>
这些都不适合我。
答案 0 :(得分:0)
deferring becomeFirstResponder()为我解决了这个问题
dispatch_async(dispatch_get_main_queue(), {
userInfoCell?.nameField.becomeFirstResponder()
})