我正在创建一个带有设置页面的应用程序,该页面设置为带有自定义单元格的UITableView。这些单元格设置如下:
每次更换其中一个开关时,我需要遍历这些单元格的表格。我需要检查哪些开关打开以制作用户首选设置的数组(在这种情况下,打开的单元格将其标签添加到数组中)。以下是我尝试使用的代码:
for var x = 0; x < preferredDistances.count; x++ {
var indexPath = NSIndexPath(forRow: x, inSection: 0)
let cell : SettingsCell = settingsTable.cellForRowAtIndexPath(indexPath) as! SettingsCell
if cell.settingsCellSwitch.on {
preferredDistances.append(cell.settingsCellLabel.text!)
}
}
当尝试使用此代码遍历UITableView时,我的单元格返回nil。我在这段代码中做错了什么,我该如何解决?
答案 0 :(得分:2)
您的方法存在根本缺陷。您有责任了解启用了哪些开关。由于表格单元格被重用,因此无法可靠地询问它们设置的开关。
这是另一种可能的方法:
初始化视图时(例如,在viewDidLoad()
中),使用默认设置创建一个数组:
var settings = [true, false, false, false, true, false]
此数组的长度应与您在numberOfRowsInSection
中引用的数组的长度相同。
更新滑块(由用户更改)时,更新阵列中的相应项目
在cellForRowAtIndexPath
中,使用数组中的相关设置来设置滑块的值。
答案 1 :(得分:0)
正确的答案是不要通过单元格来确定其开关的状态。您应该有一个模型(可以像NSArray
或NSDictionary
一样简单)支持存储交换机状态的UITableView
(并且每当您更新交换机时该模型都会更新)
这样,当需要获得所有开关的状态时,你会询问你的模型,而不是询问视图。
正如其中一位评论员指出的那样,在iOS上,UITableViewCell
被重用(如果设计正确),这使得您当前的方法也非常不可扩展。