在UITableCells中引用UISwitch

时间:2009-08-03 15:31:53

标签: iphone objective-c uikit

我有一个表格视图,我正在使用我的应用程序中的某些设置。表格单元格都是默认的(根本没有自定义),只包含一些标签文本和附件视图的UISwitch。

我的问题是我需要一个对开关的引用,以便我知道它何时开启和关闭。

目前我将交换机的'tag'属性设置为表格中单元格索引的属性(从tableView中的[indexPath row]中获取:cellForRowAtIndexpath :)。

当你的表中只有一个Section时,这很好,但我现在正在添加一个新的部分。问题是它们都是0基于索引的,所以每个部分中的开关最终将重用标签 - 这是不好的。

有关更好的方法来实现这一目标的任何建议吗? 感谢。

3 个答案:

答案 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];