Краткая предыстория (чтобы не били меня палками): наш штатный программер ушел в мир иной, не успев исправить несколько ошибок во вспомогательном рабочем приложении. Я совсем вообще не программист, но поскольку доступ к Xcode у меня есть, я попытался как-то вникнуть. Что-то смог изменить, но вот эти ошибки так и не смог ни нагуглить, ни понять.
-
в разделе приложения есть поисковая строка и модальное окно для отправки сообщений другим пользователям (через DJSemiModalViewController). Так вот, как я понял, для того, чтобы при открытии модального окна оно поднималось над клавиатурой, а не пряталось под ней, есть кусок кода
func setKeyboard() { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } @objc func keyboardWillShow(notification: NSNotification) { if let keyboardFrame = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { if self.controller.view.frame.origin.y == 0 { let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! Double UIView.animate(withDuration: duration) { self.controller.view.frame.origin.y -= keyboardFrame.height - self.view.safeAreaInsets.bottom } } } }
Этот кусок корректно срабатывает, если вверху всего кода имеется незакомментированное setKeyboard() в куске
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
prepareSearchBar()
prepareFRC()
setKeyboard()
}
При этом, если нажать в строку поиска, приложение вылетает.
А если закомментировать setKeyboard(), то приложение не вылетает, но клавиатура закрывает собой модальное окно внизу.
Ошибка при вылете следующая:
if self.controller.view.frame.origin.y == 0 { Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
Помогите справиться с ошибкой. Спасибо.