【发布时间】:2016-09-25 05:28:16
【问题描述】:
我有一个 UITableViewController 的子类,它显示多行(准确地说是 8 行),其中最上面一行是包含 UITextField 的自定义单元格。加载视图后,我通过在该textfield 上调用becomeFirstResponder 立即弹出键盘。这一切都很好,直到我从 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)
}
...
我尝试过的事情:
- 在
viewWillAppear()中调用userInfoCell?.nameField.becomeFirstResponder() - 在
viewDidAppear()中调用userInfoCell?.nameField.becomeFirstResponder() - 在
UserInfoTableViewCell.awakeFromNib()中调用nameField.becomeFirstResponder()。 - 在调用
userInfoCell?.nameField.becomeFirstResponder()后调用tableView.scrollToRowAtIndexPath()。 - 在我的
viewWillAppear()中删除super.viewWillAppear()
这些都不适合我。
【问题讨论】:
-
试试这个:
let Cell = tableView.dequeueReusa...../return cell -
感谢您的建议,但遗憾的是没有这样做。我得到相同的滚动到底部问题。
-
嗯,我把 Stack Overflow 给绊倒了吗?
标签: ios swift uitableview autoscroll becomefirstresponder