如何从UITableViewCell代理editDidEnd到UITableViewController?

时间:2011-08-15 13:09:31

标签: objective-c uitableview ios4

我有一个自定义的UITableViewCell:

@interface EditingTableViewCell : UITableViewCell <UITextFieldDelegate> {
    UITextField *editableText;
    UILabel *textLabel;
}

我确实从UITextField editingDidEnd收到了editableText条消息。现在我如何将它的消息传递给创建这个单元格的UITableViewController? 在单元格中创建像id delegate;这样的ivar并将其设置为tableViewController实例吗?

1 个答案:

答案 0 :(得分:0)

我想我找到了一个做好工作的方法......

  • 为此单元格创建@protocol

    // EditingCellDelegate.h
    @protocol EditingCellDelegate 
     @optional
        - (void)textLabelEditDidEnd:(UITextField *)textField;

    @end
  • 将ivar添加到EditingTableViewCell

    // EditingTableViewCell.h
    ...
    @property (nonatomic, assign) id <EditingCellDelegate> delegate;

所以这样我可以将消息传递给符合该单元协议的UITableViewController。当然,您必须检查该课程conformsToProtocolrespondsToSelector。现在我可以打电话给它。像这样:

//EditingTableViewCell.m
- (IBAction)editDone:(id)sender {
    if([[self delegate] respondsToSelector:@selector(textLabelEditDidEnd:)]) {
        [[self delegate] textLabelEditDidEnd:(UITextField *)sender];
    }
}