uitableview - self.tableView 不被识别为 UITableView,而是一个随机方法

标签 uitableview swift

我在 xCode 上苦苦挣扎了几个小时,因为一个非常简单的问题。我正在对 UITableViewController 进行子类化,并在scrollViewDidScroll 方法中,我尝试访问可见的表格 View 行,如下所示:

class ShinySubclass: UITableViewController {
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        let visibleIndexPaths : [NSIndexPath] = self.tableView.indexPathsForVisibleRows()
        ...
    }
}

虽然我收到了这条可爱的消息,但它指向 self.tableView:

ShinySubclass.swift:58:48: '(UITableView, numberOfRowsInSection: Int) -> Int' does not have a member named 'indexPathsForVisibleRows'

对我来说这似乎是一个 xCode bug。我已经获得了最新版本(版本 6.1 (6A1052d)),并且我已经尝试过清理、重建、打开/关闭房间灯等任何操作...

有什么办法可以解决这个问题吗?

最佳答案

indexPathsForVisibleRows 返回 [AnyObject]?,但您试图分配给非可选的 [NSIndexPath] 变量。如果您只是让类型推断完成代码编译的工作:

let visibleIndexPaths  = self.tableView.indexPathsForVisibleRows()

它返回一个 AnyObject 数组,因此您可能想要向下转换为正确的类型,但在这种情况下需要向下转换:

let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath]

但是,由于我假设您希望在该数组不是 nil 时进行一些处理,并且考虑到如果没有行可见,indexPathsForVisibleRows 可以返回 nil,您可以使用可选绑定(bind):

if let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath] {
    ...   
}

在这种情况下,visibleIndexPaths是一个非可选数组[NSIndexPath]

关于uitableview - self.tableView 不被识别为 UITableView,而是一个随机方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078555/

相关文章:

ios - 使第三个可见行成为唯一可选择的行

ios - HomeKit - 无需过渡即可更改灯泡颜色

swift - 使用 Alamofire Swift3 发送复杂参数获取状态代码 500 错误

parse-platform - 使用 Swift 1.2 注册解析用户

ios - Swift onesignal 我可以让我的应用程序同时支持 ios 9 和 ios 10 通知吗

swift - 带有 let 的三元语法更好?

objective-c - iOS UITableView : Custom sections using information from a JSON object, 不只是计算它

ios - 使用 UIButton 转接 TableViewCell

ios - 为什么 searchBar "textDidChange"获取服务器请求并出错并崩溃

ios - 使用 Xib 时 UITableView 和 UICollectionView 的实现有什么区别?