【问题标题】:tableview item looping through all items before displaying selected item siwift在快速显示所选项目之前,tableview 项目循环遍历所有项目
【发布时间】:2018-06-22 20:52:25
【问题描述】:

我有一个应用程序,我通过 Alamofire 接收信息并将其传递到 tableview。我可以进一步获取有关传递给视图控制器的选定产品的更多详细信息。这很好用,但我现在遇到的问题是,当我单击一个单元格以获取有关特定项目的更多详细信息时,它总是必须浏览所有其他项目。如果我单击单元格 5 上的一个项目,详细视图控制器将从项目 1、2、3、4 开始显示,然后是 5,尽管它执行得很快。我相信一旦我关闭模态就像

@IBAction func closeModalPressed(_ sender: Any) {

        self.dismiss(animated: true, completion: nil)

    }

假设删除了以前的细节。我该怎么做才能让它显示第 5 项而不先循环通过 1-4

选择了行

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selected = Services.instance.items[indexPath.row]
        Services.instance.selected = selected        
        let index = IndexPath(row: indexPath.row, section: 0)
        tableView.reloadRows(at: [index], with: .none)
        tableView.selectRow(at: index, animated: false, scrollPosition: .none)
        NotificationCenter.default.post(name: NOTIFY, object: nil)

        performSegue(withIdentifier: TO_DETAILS, sender: nil)

    }

【问题讨论】:

  • 你能在 tableview didSelectRow 方法中发布你的代码吗?
  • @nikBhosale 完成
  • 你用什么代码告诉细节控制器要显示什么?
  • 您实际上是在执行 segue 之前重新加载行我不知道重新加载行的原因是什么,由于这个原因它正在循环遍历以前的单元格

标签: ios swift


【解决方案1】:

我认为您没有在 didSelectRowAt 中执行任何 api 调用或任何操作,我建议您尝试关注,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selected = Services.instance.items[indexPath.row]
    Services.instance.selected = selected        
    NotificationCenter.default.post(name: NOTIFY, object: nil)
    performSegue(withIdentifier: TO_DETAILS, sender: nil)
}

您在这里不必要地重新加载行并要求表格视图再次选择同一行,最终调用 didSelectRowAt。

【讨论】:

  • 还是一样的效果。它仍然循环遍历所有
  • 你能告诉我通知“通知”有什么作用吗?因为上面提到的代码中没有可以循环的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多