自定义单元格内对象的选择器

时间:2013-03-19 18:51:29

标签: ios objective-c uitableview

我在自定义单元格中有一个开关。交换机已分配并设置为自定义单元格的.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;
    }
}

2 个答案:

答案 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
    }
};