При редактировании `UITableView` не вызывает didSelectRowAtIndexPath??

У меня есть UITableViewController, где пользователь должен иметь возможность редактировать элементы. Чтобы включить редактирование, я использую это:

self.navigationItem.rightBarButtonItem = self.editButtonItem;

Для всех, кто не знает, откуда приходит self.editButtonItem, он предопределен SDK.

Итак, теперь, когда я нажимаю на любой элемент, этот метод называется:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

но как только я нажму кнопку редактирования и, пока редактирование будет активным, этот метод, похоже, не вызван.

Любая идея, что я пропущу?

Это остальная часть кода, связанного с редактированием:

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return UITableViewCellEditingStyleNone;
}


- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return NO;
}

Спасибо за помощь.

MCB

Ответ 1

Вы должны установить для свойства allowSelectionDuringEditing UITableView значение true... здесь ссылка UITableView ref

Ответ 2

Вы устанавливаете self.editing = YES при нажатии кнопки редактирования?

Когда в режиме редактирования этот метод вызывается, вместо didSelectRow, когда вы нажимаете строку:

tableView:commitEditingStyle:forRowAtIndexPath:.

Ответ 3

Я решил эту проблему другим способом. Моя кнопка "Редактировать" была на моей панели навигации, и именно по этой причине она не была вызвана. После того, как я встроил VC в контроллер навигации и поместил новую кнопку "Редактировать" внутри своего элемента навигации, кнопка "Создать" начала вызываться.

Ответ 4

но как только я нажму кнопку редактирования и, пока редактирование будет активным, этот метод, похоже, не вызван.

Любая идея, что мне не хватает?

Да. Ожидается, что tableView:didSelectRowAtIndexPath: будет вызываться, когда нажата кнопка в вашей навигационной панели. Это никогда не произойдет. Этот метод вызывается только при выборе строки.

Когда кнопка редактирования будет нажата, вы захотите перевести вашу таблицу в режим редактирования. В вашем представлении контроллер:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated]; // must be called first according to Apple docs

    [self.tableView setEditing:editing animated:animated];
}

Затем вы обрабатываете редактирование событий, добавляя метод tableView:commitEditingStyle:forRowAtIndexPath:.