我是iOS开发的初学者,我很难在网络编程中做一些看似非常简单的事情。当iOS程序启动时,我运行一个函数从我的服务器收集一些信息。在此期间,有一个UITableView加载了一些初始数据。大约1秒钟后,我从服务器得到了我的回复。根据该响应,我想要么什么都不做,或者灰显/禁用UITableView中的一行。
使用调试工具我可以确认我的服务器请求是否正常工作,但在我的生命中我无法弄清楚如何更改UITableView中的单元格。
想法是,如果服务器响应:true
,那么我想找到UITableView中的第一行,将文本颜色变为浅灰色并禁用它。这样做的最佳方式是什么?
我尝试了很多东西,而且我不想用可能偏离目标的代码示例来破解这个问题。我可以在初始加载UITableView期间做我想做的事情(使用override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
方法),但那时我仍然没有来自服务器的数据。因此,对我来说困难的部分是,我需要能够在初始加载后的某个时间对表进行这些更改,无论何时服务器响应。请记住,我不想更改dataSource
的任何内容,我只想更改其中一行的外观/功能。
非常感谢任何帮助,谢谢!
答案 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
}