Я уже несколько часов гуглю, но не могу найти никого с такой же проблемой.
У меня есть пользовательская ячейка с UIButton и UITextField, подключенными как IBOutlets в классе ячеек. В моем ViewController я настроил trailingSwipeAction, чтобы представить кнопку «редактировать». То, что я пытаюсь сделать sh, так это то, что после того, как редактирование коснется, я хочу установить UITextField в ячейке на .becomeFirstResponder (), чтобы пользователь мог редактировать текстовое поле. И кажется, что он отлично работает с приведенным ниже кодом, но (как показано в видео) 1 se c после того, как он становится первым респондентом, ячейка исчезает. Если я тогда снова пытаюсь провести по пустой ячейке, я получаю исключение в Xcode:
Thread 1: Exception: "Actions view not added to view hierarchy after calling -swipeActionController:insertActionsView:forItemAtIndexPath: on <UITableView: 0x7fab7b827000; frame = (0 20; 414 793); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x60000205b870>; layer = <CALayer: 0x600002e5d040>; contentOffset: {0, -24}; contentSize: {414, 264}; adjustedContentInset: {24, 0, 0, 0}; dataSource: <FocusOn.TodayController: 0x7fab7ac06730>>"
Действие смахивания в моем ViewController:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let swipeAction = UISwipeActionsConfiguration(actions: [editContextualAction(forRowAt: indexPath), deleteContextualAction(forRowAt: indexPath)])
return swipeAction
}
func editContextualAction(forRowAt indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .normal, title: "Edit") {
(contextualAction: UIContextualAction, swipeButton: UIView, completionHandler: (Bool) -> Void) in
let goalCell = self.tableView.cellForRow(at: indexPath) as? GoalTableViewCell
if indexPath.row == 0 {
goalCell?.goalTextField.isUserInteractionEnabled = true
print(goalCell?.goalTextField.canBecomeFirstResponder) // Returns true
goalCell?.goalTextField.becomeFirstResponder()
}
completionHandler(true)
}
action.backgroundColor = .magenta
return action
}
Если после этого прокрутить табличное представление, чтобы пустая ячейка вышла из табличного представления и обратно, оно вернется. (Не видел видео).