如何在基于部分的表格视图中获取开关更改事件中单元格的索引路径
Posted
技术标签:
【中文标题】如何在基于部分的表格视图中获取开关更改事件中单元格的索引路径【英文标题】:How can I get index path of cell on switch change event in section based table view 【发布时间】:2015-02-04 10:57:35 【问题描述】:我有自定义单元格,在右侧的几个单元格中有开关。我想要的是在开关更改事件上存储特定单元格的值。表格视图有数字部分,所以我无法为开关设置标签,因为我需要部分和行来获取索引路径。
任何建议,但我必须在基于部分的表格视图中使用 UISwitch。
谢谢
【问题讨论】:
如果您在 UISwitch 值更改选择器上获取该单元格对象可以吗? 是的,在 UI 开关状态下发生了变化,但我无法确定哪个开关状态已更改。 看我的回答它可能是 halp 您需要处理两件事。 1)您的单元格是一个整体数据的视图和控制器。它需要包含该数据的引用。 2)您需要一个处理程序来更改该数据。您可以在单元格中执行此操作,或者更好地在表格视图等中心位置执行此操作。请参阅我的答案,其中显示了如何。 【参考方案1】:在您的自定义单元格中添加可帮助您识别单元格所代表信息的属性。索引路径、数据模型的索引等...
然后向单元格添加一个块属性,当单元格切换发生变化时,您可以调用它来告诉 UITableView 或任何其他代码。例如
@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>
这使您可以处理表格视图控制器中的所有更改。希望这会有所帮助。
【讨论】:
【参考方案2】:@Jageen 的答案有效。我必须找出单元格是哪个superview,我的单元格高一级。
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
【讨论】:
【参考方案3】:如果您对最大部分中的最大行数有所了解,即使您有部分,您仍然可以创建标签。例如,如果您认为一个部分将有 1000 行,那么您可以使用以下公式创建标签。
tag = section * 1000 + row;
稍后在您的 IBAction 中,您可以使用以下命令找出索引路径(部分和行):
section = tag/1000;
row = tag%1000;
如果您不知道您的部分将有多少行,您可以使用sender.superview.superview
找出单元格(如果在层次结构中添加了任何其他视图,请小心)。
Rory McKinnel 的 answer 仍然是解决您问题的最干净的解决方案。
【讨论】:
以上是关于如何在基于部分的表格视图中获取开关更改事件中单元格的索引路径的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 表格视图 - 静态单元格(分组) - 更改部分标题文本颜色