我有一个表格视图,我正在使用我的应用程序中的某些设置。表格单元格都是默认的(根本没有自定义),只包含一些标签文本和附件视图的UISwitch。
我的问题是我需要一个对开关的引用,以便我知道它何时开启和关闭。
目前我将交换机的'tag'属性设置为表格中单元格索引的属性(从tableView中的[indexPath row]中获取:cellForRowAtIndexpath :)。
当你的表中只有一个Section时,这很好,但我现在正在添加一个新的部分。问题是它们都是0基于索引的,所以每个部分中的开关最终将重用标签 - 这是不好的。
有关更好的方法来实现这一目标的任何建议吗? 感谢。
答案 0 :(得分:2)
如果你大致知道你将拥有多少个部分和行,比如哦,比方说,每个部分不超过100万行,只需像下面那样对部分和行进行散列:
const int oneMillion = 1000000;
int tag = (section * oneMillion) + row;
slider.tag = tag;
然后,要找出部分和行,反转逻辑:
int tag = slider.tag;
int row = tag % oneMillion;
int section = tag / oneMillion;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow: row inSection: section];
现在获取该部分单元格中的滑块,表格的行
UITableViewCell *sliderCell = [tableView cellForRowAtIndexPath: indexPath];
UISlider *slider = [[sliderCell.contentView subviews] objectAtIndex: 0];
这假设滑块始终是单元格内容中的唯一视图。
这个方法比上面的其他一些建议要长一些,但是它可以让你不必将参考文件缓存到一边。
答案 1 :(得分:0)
对于每个单元格,将委托链接设置回表视图控制器,还有某种行引用ID - 然后将交换机连接到单元格IBAction方法,该方法使用该单元格的引用ID回调委托
答案 2 :(得分:0)
你可以做的是拥有数组数组或字典,按部分编号键入(或者在数组的情况下,它们将按照部分编号的顺序),现在只需要检索一个开关假设您知道部分和行号
UISwitch *switch=[[switchArray objectAtIndex:section] objectAtIndex:row];
或者如果你有字典
UISwitch *switch=[[switchDictionary objectForKey:section] objectAtIndex:row];