如何在基于表格视图的切换变化事件中获取单元格的索引path

我有自定义的单元格在右侧的几个单元格中切换。 我想要的是在开关切换事件中存储特定单元格的值。 表视图有数字部分,所以我不能设置切换标记,因为我需要部分以及行来获取索引path。

任何build议任何替代,但我必须使用UISwitch在部分基于表视图。

谢谢

在您的自定义单元格中添加可帮助您识别单元格所代表的信息的属性。 索引path,您的数据模型的索引等…

然后添加一个块属性的单元格,您可以调用告诉UITableView或任何其他代码片段切换时更改。 例如

@property (nonatomic,copy) void (^onSwitchChange)(UITableViewCell *cell); 

在您的自定义单元代码中,为UISwitch添加一个操作处理程序。 当它触发时,调用self.onSwitchChange(self),它将通知注册了onSwitchChange块的代码开关已经改变,在哪个单元上。

在创build单元格的表格视图中,按如下所示设置onSwitchChange块:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath { <snip> YourUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:yourCellIdentifier forIndexPath:indexPath]; cell.onSwitchChange=^(UITableViewCell *cellAffected){ // Add code to deal with the swicth switch using properties of cellAffected ... Your handler code here ... }]; <snip> } 

这使您可以处理表视图控制器中的所有更改。 希望这可以帮助。

@Jageen的答案是有效的。 我必须找出这个单元的超级观点,我的水平要高一级。

 UITableViewCell *cell = (UITableViewCell*)[sender superview].superview.superview; NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell]; NSLog(@"Section %ld Row : %ld",(long)indexPath.section,(long)indexPath.row); // print row section and index 

即使您有部分,您仍然可以创build标签,如果您对最大部分中的最大行有一些想法。 例如,如果您认为某一节中将有1000行,则可以使用以下公式创build标签。

 tag = section * 1000 + row; 

后来在你的IBAction的开关,你可以find使用以下的索引path(部分和行):

 section = tag/1000; row = tag%1000; 

如果你不知道你的部分有多less行,你可以使用sender.superview.superview查找单元格(如果在层次结构中添加了其他视图,请小心)。

Rory McKinnel的答案仍然是解决您的问题的最简单方法。