我在自定义单元格中有一个开关。交换机已分配并设置为自定义单元格的.m文件中单元格的accessoryView。
但是,我需要在自定义单元所在的tableView的ViewController中处理开关的选择器方法。
目前,当点击开关时,我发现它无法找到选择器的崩溃,很可能是因为它查看了单元格的.m。
如何声明我的开关让其选择器看起来正确?
根据请求编辑 ...
//cell .m
- (void)setType:(enum CellType)type
{
if (_type == SwitchType)
{
UISwitch *switchView = [[UISwitch alloc] init];
[switchView addTarget:self action:@selector(flip:) forControlEvents:UIControlEventValueChanged];
self.accessoryView = switchView;
}
}
答案 0 :(得分:3)
听起来像delegate的工作。在您的单元格界面中创建协议,如:
@protocol MyCellDelegate <NSObject>
- (void)myCell:(MyCell *)sender switchToggled:(BOOL)value;
@end
并指定代理
id <MyCellDelegate> delegate;
然后在你的MyCell.m中,切换开关时检查是否定义了委托,如果是,则调用它:
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(myCell:switchToggled:)]) {
[self.delegate myCell:self switchToggled:switch.value]
}
在ViewController中,确保将ViewController设置为单元的委托并实现协议方法。
答案 1 :(得分:0)
您可以将交换机创建为公共属性,然后在cellForRowAtIndex:
@interface CustomCell : UITableViewCell
@property (nonatomic, strong) UISwitch *switch;
或者您可以创建一个被触发的自定义NSNotification
。让你的viewController监听通知,然后处理它。
Blocktastic:)
你也可以使用积木。
typedef void(^CustomCellSwitchBlock)(BOOL on);
@interface CustomCell : UITableViewCell
@property (nonatomic, readwrite) CustomCellSwitchBlock switchAction;
然后在CustomCell.m
:
- (void)handleSwitch:(UISwitch *)switch
{
switchAction(switch.on);
}
然后在cellForRowAtIndex:
:
cell.action = ^(BOOL on){
if (on) {
// Perform On Action
} else {
// Perform Off Action
}
};