选择显示键盘的单元格时,iOS TableView 的 indexPath 错误

标签 ios swift uitableview autolayout

我有 tableView 大小由 AutoLayout 设置(底部到底部布局指南,顶部到另一个 View 等等,但首先是 UISearchBar 到顶部布局指南): My tableView

带有 tableView 的 Controller :

Controller settings

我需要在显示键盘时更改表格偏移量,所以我有以下两种方法:

// MARK: - Keyboard
func keyboardWasShown (notification: NSNotification) {
    let info: NSDictionary = notification.userInfo!
    let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as! NSValue
    let keyboardSize: CGSize = value.CGRectValue().size

    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0)
    self.tableView.scrollIndicatorInsets = self.tableView.contentInset

}

func keyboardWillBeHidden (notification: NSNotification) {
    self.tableView.contentInset = UIEdgeInsetsZero
    self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero
}

它工作正常,但在显示键盘时出现问题。无法选择最后一项,而是我得到了上一项。我点击了最后一项的位置,它应该导航到包含最后一项的详细信息页面,但我看到的是包含前一项的详细信息页面。它不是针对所有项目转移,而是针对最后一个项目转移,当我过滤到一个项目时它工作正常。当键盘被隐藏时(并且项目仍然被过滤)那么它也没关系(它选择了正确的东西)。所以我想问题一定出在这里:

    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0)
    self.tableView.scrollIndicatorInsets = self.tableView.contentInset

那么问题出在哪里呢?感谢帮助

最佳答案

我找到了解决方案。我正在使用 UIKeyboardWillHideNotification 并且在 didSelectRowAtIndexPath 之前调用了方法 keyboardWillBeHidden 所以 tableViewcontentInset被设置回 UIEdgeInsetsZero 然后 indexPath 错误。所以现在我使用 keyboardDidHide 而不是 keyboardWillBeHidden:

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidHide:", name: UIKeyboardDidHideNotification, object: nil)

...

func keyboardDidHide (notification: NSNotification) {     
    self.tableView.contentInset = UIEdgeInsetsZero
    self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero
}

关于选择显示键盘的单元格时,iOS TableView 的 indexPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340760/

相关文章:

iphone - 在应用程序中购买 SKProductsRequest 在 ios 5 中崩溃我的应用程序

ios - 无法将 UISearchController 添加到 UIViewController

ios - 注册大量 UICollectionViewCell 类以在 UICollectionView 中重用

ios - 为什么我的 tableview 属性为 null

crash - UITableView 崩溃而没有错误

ios - 如何检测 iOS UIWebView 中的重定向

ios - 对象 block 复制

iphone - Xcode 中的代码签名错误

ios - 骨架库 - 带有约束的类型 'Array' 的扩展不能有继承子句

objective-c - 在 Storyboard中,如何制作用于多个 Controller 的自定义单元格?