【问题标题】:Stop cellForRowAtIndexPath when tapping segments点击段时停止 cellForRowAtIndexPath
【发布时间】:2015-12-24 17:02:27
【问题描述】:

我在它下面有一个segmentedControl 和一个tableView

SegmentedControl 有两个部分:“新闻”和“事件”。

新闻和事件下载到var news = [News]()func getJson(type: Int)

新闻-news.type = 1,活动news.type = 2

我的getJson方法是:

func getJson(type: Int) {
    self.news = [] // empty news array
    if jsonData["type"] == type {
        // save needed news to array
        self.news.append(News(id: jid, title: jtitle, subtitle: jsubtitle, urlstring: jurlstring, image: jimage!))
    }
}

所以问题是当我迅速滚动并点击第二段时,应用程序崩溃:

因为在getJson 中的self.news = []self.news.append 之间,这里是cellForRowAtIndexPath

我的问题是当我点击片段时如何停止cellForRowAtIndexPath?谢谢。

【问题讨论】:

  • numberOfRowsInSection 返回什么?当您切换段并开始加载数据时,您是否调用reloadData
  • 我返回news.count。我确实打电话。问题是 tableView 不断填充单元格,但 getjson 确实 self.news = []
  • 通常您会将数据加载到临时数组中,然后在加载后将数据复制到self.news,然后调用reloadData
  • 是的,它解决了问题,谢谢。你可以发布答案,我会接受的
  • 还有一种方法,当我选择片段时停止滚动

标签: ios swift uitableview uisegmentedcontrol


【解决方案1】:

如果您从网络加载数据的代码与驱动您的 tableview 的数组混淆了,那么您将遇到问题......而您就是这样。

典型的方法是将数据加载到网络加载代码中的临时数组中,然后在加载完成后将其分配给实际数组(在您的情况下为 self.news),然后调用 reloadData on你的表格视图。

您可能还需要考虑加载数据时的用户体验。我可能会这样做:

  1. 当segment改变时,隐藏tableview并取消隐藏以tableview位置为中心的UIActivityIndi​​catorView
  2. 开始从网络加载到临时数组中
  3. 加载完成后将其分配给self.news
  4. 重新加载表格数据
  5. 隐藏 UIActivityView 并取消隐藏 tableview

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多