如何在基于节的表视图中获取切换更改事件上单元格的索引路径

时间:2015-02-04 10:57:35

标签: ios objective-c uitableview ios7 xcode6

我有自定义单元格,右侧有少数单元格。我想要的是在交换机更改事件中存储特定单元格的值。表视图有数字部分,所以我不能为switch设置标签,因为我需要section和row来获取索引路径。

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

由于

3 个答案:

答案 0 :(得分:6)

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

然后向单元格添加一个块属性,当单元格开关发生变化时,可以调用该属性来告诉UITableView或任何其他代码。 e.g。

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

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

在创建单元格时,在表格视图中,按如下方式设置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>
}

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

答案 1 :(得分:1)

@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

答案 2 :(得分:0)

如果您对最大部分中的最大行有所了解,即使您有部分,仍然可以创建标记。例如,如果您认为某个部分中有1000行,则可以使用以下公式创建标记。

tag = section * 1000 + row;

稍后在您的IBAction切换中,您可以使用以下命令查找索引路径(部分和行):

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

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

Rory McKinnel的answer仍然是解决问题的最干净的解决方案。