使用storyboard,我有一个包含多个动态原型单元格的表视图控制器。其中一个单元格是一个自定义动态原型单元格(我为其创建了一个子类),其中包含一个标签和一个开关。我将交换机的操作连接到视图控制器中的操作方法(例如switchChanged :)。在cellForRowAtIndexPath中,我配置并返回适合指定索引的单元格。到目前为止一切都很好。
问题:我的应用程序有多个这些自定义单元格的实例,那么如何区分哪个开关已更改?一种想法是,在视图控制器中,我可以为每个单元创建一个成员开关,并在第一次调用cellForRowAtIndexPath时将它们链接到特定的单元格开关。然后我可以使用这些成员开关来比较传递给switchChanged的开关:。
我知道我可以尝试并立即得到答案,但我希望讨论其他开发人员如何做我想做的事情。这是最好/最差/最好的方法,什么是实用的替代方案?
此致
- 约翰
答案 0 :(得分:1)
我有过一次这种情况(不是用开关,但我相信它适用的情况相同)。我已经设法通过继承对象类并在子类中添加所需的属性/方法来解决它。
调用操作时,您的发件人将成为子类,您可以在那里访问添加的代码。
我不知道是否是这种情况,但如果您只是尝试更改某个值,则应在创建对象时使用将switch值绑定到属性。甚至不需要IBAction来打电话。
编辑:示例:
@interface MySwitch : UISwitch
@property (nonatomic, assign) NSUInteger someProperty;
@end
然后,每次创建单元格时,都可以将“someProperty”设置为您想要的任何内容。
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
// yada yada yada...
UITableViewCell *cell;
// yada yada yada...
[cell.myLinkedSwitch setSomeProperty:indexPath.row];
return(cell);
}
除非您没有使用tableView:cellForRowAtIndexPath:
方法创建单元格。然后你可能应该使用绑定来将你的价值放到正确的位置。
答案 1 :(得分:0)
我没有添加单独的子类,而是将行存储在每个按钮的“禁用标题”属性中。这非常有效。第一个代码在CellForRowAtIndexPath:
中NSString *strRow = [[NSString alloc] initWithFormat:@"%i",useRow];
[btnPreferredChk setTitle:strRow forState:UIControlStateDisabled];
然后我的按钮操作方法使用该值来执行适当的活动。
- (IBAction)goStorePick:(id)sender
{
UIButton *useButton = [[UIButton alloc] init];
useButton = sender;
NSInteger *storeRow = [[useButton titleForState:UIControlStateDisabled] integerValue];
NSString *CMIMsg = [[NSString alloc] initWithFormat:@"goStorePick Method Executed at Row: %i", storeRow];
[self shwMessage:CMIMsg];
}
这对我有用。