Пользовательский TabelViewCell исчезает после того, как UITextField в ячейке становится первым респондентом - PullRequest
0 голосов
/ 05 апреля 2020

Я уже несколько часов гуглю, но не могу найти никого с такой же проблемой.

У меня есть пользовательская ячейка с 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
}

enter image description here

Если после этого прокрутить табличное представление, чтобы пустая ячейка вышла из табличного представления и обратно, оно вернется. (Не видел видео).

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