iOS等待服务器数据改变UITableView外观

时间:2016-04-01 15:14:10

标签: ios swift uitableview asynchronous

我是iOS开发的初学者,我很难在网络编程中做一些看似非常简单的事情。当iOS程序启动时,我运行一个函数从我的服务器收集一些信息。在此期间,有一个UITableView加载了一些初始数据。大约1秒钟后,我从服务器得到了我的回复。根据该响应,我想要么什么都不做,或者灰显/禁用UITableView中的一行。

使用调试工具我可以确认我的服务器请求是否正常工作,但在我的生命中我无法弄清楚如何更改UITableView中的单元格。

想法是,如果服务器响应:true,那么我想找到UITableView中的第一行,将文本颜色变为浅灰色并禁用它。这样做的最佳方式是什么?

我尝试了很多东西,而且我不想用可能偏离目标的代码示例来破解这个问题。我可以在初始加载UITableView期间做我想做的事情(使用override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell方法),但那时我仍然没有来自服务器的数据。因此,对我来说困难的部分是,我需要能够在初始加载后的某个时间对表进行这些更改,无论何时服务器响应。请记住,我不想更改dataSource的任何内容,我只想更改其中一行的外观/功能。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

你可以在你的UITableViewController中添加一个额外的变量:

var yourVar : Bool = false

然后在从服务器收到数据后,将变量设置为true或false并调用reloadData():

self.yourVar = true // or self.yourVar = false 
self.tableView.reloadData()

然后在你的cellForRowAtIndexPath函数中检查第一行以改变它的外观:

if (indexPath.row == 0 && yourVar == true) {
    cell.selectionStyle = UITableViewCellSelectionStyleNone
}

让方法willSelectRowAtIndexPath确保您不能再选择该单元格了:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
   return (indexPath.row == 0 && self.yourVar = true) ? nil : indexPath
}

- 编辑 -

或者,您可以使用以下方法检查willSelectRowAtIndexPath中单元格的选择属性:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
    let cell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
    return (cell.selectionStyle == UITableViewCellSelectionStyleNone) ? nil : indexPath
}