Как прокси редактировать DidEnd из UITableViewCell в UITableViewController? - PullRequest
1 голос
/ 15 августа 2011

У меня есть пользовательский UITableViewCell:

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

И я получил editingDidEnd сообщение от UITextField editableText. Теперь, как я могу передать это сообщение UITableViewController, который создает эту ячейку? Является ли создание ivar, подобного этому id delegate; внутри ячейки, и установка его на экземпляр tableViewController единственным способом?

1 Ответ

0 голосов
/ 16 августа 2011

Я думаю, что нашел способ сделать хорошую работу ...

  • Создать @protocol для этой ячейки

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

    @end
  • Добавить ivar в EditingTableViewCell класс

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

Таким образом, я могу передать сообщение UITableViewController, который соответствует протоколу этой ячейки. Конечно, вы должны проверить этот класс conformsToProtocol и respondsToSelector. Теперь я могу это назвать. Примерно так:

//EditingTableViewCell.m
- (IBAction)editDone:(id)sender {
    if([[self delegate] respondsToSelector:@selector(textLabelEditDidEnd:)]) {
        [[self delegate] textLabelEditDidEnd:(UITextField *)sender];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...