确定屏幕上是否有单元格并执行功能

时间:2017-08-20 07:59:31

标签: ios uitableview swift3

我想知道一个单元格是否在表格视图中显示在屏幕上。

我尝试了willDisplay方法,但没有用。我甚至试过

if (tableView.indexPathsForVisibleRows?.contains(indexPath))! {
                    print("showing now")
}


此功能有效,但当单元格在屏幕上或向下滚动时,它不会打印任何内容。例如:如果我有5个单元格,当应用程序启动并且单元格在显示屏上时,不会打印任何内容。此外,当我从单元格1滚动到5时,不显示任何内容。相反,如果我从单元格5回滚到1,它将显示它,这完全违背了我的目的。

我希望您理解我的疑问,并能帮助我找到合适的解决方案。

干杯!

2 个答案:

答案 0 :(得分:1)

tabView的

willDisplay方法应该适合您。

正确地提供DataSourceDelegateControl+dragTableView到黄色图标会显示正确的选项。

enter image description here

将扩展名添加到ViewControllerClass并确认表格协议 - :

extension ViewController : UITableViewDelegate,UITableViewDataSource{

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }// Default is 1 if not implemented

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return 2
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        cell?.textLabel?.text = indexPath.row
        return cell!
    }

    // will display prints while displaying cells

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        print("visible now")
    }

答案 1 :(得分:0)

请务必联系UITableView的{​​{1}}媒体资源,并遵守delegate

尝试

UITableViewDelegate

来自func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { print("cell \(indexPath.row) is about to display") } 的协议。可以找到文档here