iOS 13 UIContextualAction завершение вызывает неожиданное увольнение клавиатуры - PullRequest
0 голосов
/ 01 октября 2019

У меня есть UITableView с ячейками, которые имеют возможность перестановки UIContextualActions для удаления или переименования (редактирования) текстовых полей отдельной ячейки.

Поскольку я переключился на Swift 5 / iOS 13, вызывая переименование UIContextualActionв этих ячейках клавиатура запускается и мгновенно закрывается, прежде чем пользователь сможет набрать текст. Мало того, что клавиатура исчезает, конкретная ячейка, которую я пытаюсь редактировать, становится полностью пустой, и генерируется следующее предупреждение:

[Snapshotting] Snapshotting a view (0x10c90a470, _UIReplicantView) that has not been rendered at least once requires afterScreenUpdates:YES.

Ниже приведен код для переименования UIContextualAction:

let actionRename = UIContextualAction(style: .normal, title: "") { (action, view, completionHandler) in

      let cell = self.tableLayers.cellForRow(at: indexPath) as! LayerUITableViewCell
      cell.layerTitle.isEnabled = true // enable UITextField editing
      cell.layerTitle.becomeFirstResponder() // launch keyboard
      cell.layerTitle.selectedTextRange = cell.layerTitle.textRange(from: (cell.layerTitle.beginningOfDocument), to: (cell.layerTitle.endOfDocument)) // select all text
      completionHandler(true)

} // end of let actionRename

Я предполагаю, что анимация действия UIContextual каким-то образом вызывает resignFirstResponder клавиатуры.

Подводя итог, до swift 5/iOS 13 порядок событий был примерно таким:

  1. пользователь пролистывает ячейку влево / вправо
  2. пользователь нажимает кнопку UIContextual
  3. ячейка возвращается в центр
  4. текст выделяется
  5. клавиатура запускает
  6. типы пользователей, нажатия возвращаются
  7. клавиатура resignFirstResponder

В то время как поведение, которое я наблюдаю после миграции, выглядит следующим образом:

  1. пользователь перемещает ячейку влево / вправо
  2. пользователь нажимает кнопку UIContextual
  3. текст выделен
  4. клавиатура запускается
  5. ячейка возвращается в центр (что как-то вызывает resignFirstResponder)
  6. клавиатура resignFirstResponder

Обновление 2019/10/02

Я подтвердил, что именно анимация ячейки вызывает преждевременное отключение клавиатуры. Если я введу задержку после завершения, то Хандлер выглядит следующим образом:

let actionRename = UIContextualAction(style: .normal, title: "") { (action, view, completionHandler) in

      completionHandler(true)
      self.perform(#selector(self.layerRenameDos), with: nil, afterDelay: 1.0)   
      // layerRenameDos has the editing/firstResponder code from above

    } // end of let actionRename

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

...