Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在基于节的表视图中获取开关更改事件单元格的索引路径_Ios_Objective C_Uitableview_Ios7_Xcode6 - Fatal编程技术网

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

Ios 如何在基于节的表视图中获取开关更改事件单元格的索引路径,ios,objective-c,uitableview,ios7,xcode6,Ios,Objective C,Uitableview,Ios7,Xcode6,我有一个自定义单元,在右侧的几个单元中有开关。我想要的是在开关更改事件中存储特定单元格的值。表视图有许多节,所以我不能为开关设置标记,因为我需要节和行来获取索引路径 任何建议都可以,但我必须在基于节的表视图中使用UISwitch 感谢您在自定义单元格中添加属性,帮助您识别单元格所代表的信息。索引路径、数据模型的索引等 然后将块属性添加到单元格中,当单元格开关更改时,可以调用该属性来告知UITableView或任何其他代码段。e、 g @property (nonatomic,copy) void

我有一个自定义单元,在右侧的几个单元中有开关。我想要的是在开关更改事件中存储特定单元格的值。表视图有许多节,所以我不能为开关设置标记,因为我需要节和行来获取索引路径

任何建议都可以,但我必须在基于节的表视图中使用UISwitch


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

然后将块属性添加到单元格中,当单元格开关更改时,可以调用该属性来告知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>
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath(NSIndexPath*)indexPath
{
YourUITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:yourCellIdentifier forIndexPath:indexPath];
cell.onSwitchChange=^(UITableViewCell*受影响的单元格){
//添加代码以使用CellInfected的属性处理swicth开关
…您的处理程序代码在此。。。
}];
}

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

如果您对最大部分中的最大行有一些了解,那么即使您有部分,您仍然可以创建标记。例如,如果您认为一个节中将有1000行,那么您可以使用以下公式创建标记

tag = section * 1000 + row;
稍后在switch的iAction中,您可以使用以下命令找到indexpath(节和行):

section = tag/1000;
row = tag%1000;
如果您不知道分区将有多少行,可以使用
sender.superview.superview
查找单元格(如果在层次结构中添加了任何其他视图,请小心)


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

来自@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

如果你在UISwitch value changes Selector上获取单元格对象,可以吗?是的,在UI开关状态下,可以更改,但我无法确定哪个开关状态已更改。请看我的答案,它可能是暂停。这里有两件事需要处理。1) 您的单元格是一个查看和控制一段总体数据的视图和控制器。它需要包含该数据的引用。2) 当数据发生更改时,您需要一个处理程序。您可以在单元格中执行此操作,或者最好在表格视图等中心位置执行此操作。看看我的答案,它显示了如何。