【发布时间】:2017-10-03 18:22:52
【问题描述】:
我有一个包含 UISwitch 和 UILabel 的自定义 UITableViewCell。轻按开关后,我想知道哪个单元格的开关已激活/停用。
我的 cellForRowAtIndexPathMethod 中有以下代码,用于将目标添加到我的单元格的 UISwitch:
[cell.notifSwitch addTarget:self action:@selector(switchChangedFromCell:) forControlEvents:UIControlEventValueChanged];
这里是选择器的代码:
- (void)switchChangedFromCell:(id)sender {
HydrationNotificationTableViewCell *cell = (HydrationNotificationTableViewCell *)sender;
if ([cell.notifSwitch isOn]) {
NSLog(@"Notification for %@ has been activated", cell.notifLabel.text);
}
else {
NSLog(@"Deactivated notification %@", cell.notifLabel.text);
}
}
马上我相信我将发送者作为一个单元格是错误的,因为发送者确实是单元格中的 UISwitch。我也想知道如何传递单元格本身,以便知道哪个单元格已更改。
一种解决方案是在我的 cellForRowAtIndexPath 方法中为每个 UISwitch 设置不同的标签,但我想知道是否有更清洁的解决方案。
【问题讨论】:
-
如果你想获得你添加了 UISwitch 的 UITableViewCell 的引用,你可以使用 "testSwitch?.superview as?HydrationNotificationTableViewCell"
-
是的,我刚刚发布了一个答案,但我想我会继续为 UITableView 创建一个类别
-
Ya @Duncan C's answer是一个不错的选择,如果您想使用任何其他选项,您可以为 UISwitch 创建自定义类并在其中和 cellForRow:AtIndexPath 添加 NSIndexPath 类型的属性您可以将索引路径分配给 switch 属性,在目标上您也可以通过这种方式获取 indexPath,我希望它也是一个不错的选择。
-
这也是另一个不错的选择。我很感激!
-
谢谢,这一切都基于我们个人的兴趣和方法的风格,您可以根据需要使用更好的选择,但最终两种解决方案都会给您正确的答案。
标签: ios objective-c xcode uitableview