0

我在自定义单元格中有一个开关。该开关被分配并设置为自定义单元格的 .m 文件内的单元格的附件视图。

但是,我需要在自定义单元格所在的 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;
    }
}
4

2 回答 2

3

听起来像是代表的工作。在您的单元界面中创建一个协议,例如:

@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 设置为单元的委托并实现协议方法。

于 2013-03-19T19:01:15.360 回答
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
    }
};
于 2013-03-19T18:59:08.107 回答