При редактировании `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
5 ответов
Вы должны установить свойство allowSelectionDuringEditing объекта UITableView в значение true.
Вы устанавливаете self.editing = YES
когда кнопка редактирования нажата?
В режиме редактирования этот метод вызывается вместо didSelectRow при нажатии на строку:
tableView:commitEditingStyle:forRowAtIndexPath:.
Я решил эту проблему по-другому. Моя кнопка "Редактировать" была на моей собственной панели навигации, и по этой причине ее не вызывали. После того, как я встроил VC в Navigation Controller и поместил новую кнопку Edit в его элемент навигации, кнопка Edit начала вызываться.
Краткий ответ (язык Swift):
@IBOutlet private weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.allowsSelectionDuringEditing = true // Magic happens here
}
но как только я нажимаю кнопку редактирования и, когда редактирование активно, этот метод, кажется, не вызывается.
Есть идеи, что мне не хватает?
Да. Вы ожидаете 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:
метод.