Включить все текстовые поля в UITableViewCell в режиме редактирования - PullRequest
2 голосов
/ 21 марта 2012

У меня есть куча кастомных UITableViewCells с ярлыком и текстовым полем.У меня отключено текстовое поле, но я хочу сделать так, чтобы при нажатии пользователем кнопки «Редактировать» текстовые поля стали редактируемыми.Как я могу сделать так, чтобы ВСЕ UITextFields в UITableView стали включенными?

У меня есть

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [self.navigationItem setHidesBackButton:editing animated:YES];

    if (editing) {

    }
}

, но я не могу добавить туда текстовое поле, поскольку я неиметь доступ ко всем текстовым полям.Нужно ли мне добавлять код, чтобы захватить все ячейки, пройти через них и включить текстовые поля?

Ответы [ 2 ]

8 голосов
/ 21 марта 2012

Я бы сделал это, установив isEditing BOOL на UITableViewDelegate в методе setEditing:animated: и просто обновив видимые ячейки при изменении значения.

NSArray *visibleCells = [myTable visibleCells];
for (MyTableViewCell *cell in visibleCells)
    cell.textField.enabled = isEditing;

Затем, снова используя UITableViewDelegate, обновите новые ячейки, как они появляются в tableView:willDisplayCell:forRowAtIndexPath:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textField.enabled = isEditing;
}
2 голосов
/ 21 марта 2012

Отредактируйте свой подкласс UITableViewCell и зарегистрируйте свои экземпляры для уведомления о редактировании в методе viewDidLoad или init вашего подкласса:

[[NSNotificationCenter defaultCenter] addObserver: selfселектор: @selector (disableTextBox) name: @ объект EditingIsEnabled: nil];

И реализуйте метод с именем disableTextBox, который отключает текстовое поле для этой ячейки.

Затем в вашем методе setEditing:animated опубликуйте уведомление, когда вы хотите начать редактирование:

[[NSNotificationCenter defaultCenter] postNotificationName: @ "EditingIsEnabled" object: self];

Переопределите метод dealloc в вашем UITableViewCell и удалите себя в качестве наблюдателя, иначе у вас возникнет сбой:

[[NSNotificationCenterdefaultCenter] removeObserver: self];

Если вы не используете ARC, обязательно вызовите [super dealloc].Если вы используете ARC, не звоните super.

Вы можете сделать то же самое, когда хотите отключить все ячейки, просто опубликовать уведомление с другим именем, например EditingIsDisabled.

Дайте мне знать, если вам понадобится немного конкретизировать код.

Редактировать: мне больше нравится метод DBD в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...