Есть ли способ «заставить» клавиатуру отклоняться в iOS Swift программным способом? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть viewController EditMessage, в котором есть два UITextFields (UITextView), которые используют клавиатуру, и они прекрасно работают. Эта часть является основным стандартным материалом. Когда отображается клавиатура, я регистрирую жест тега для всего view, поэтому, если пользователь щелкает где-либо еще, я отклоняю клавиатуру:

 self.view.addGestureRecognizer(UITapGestureRecognizer(target: self,
         action: #selector(dismissKeyboard)))

В dismissKeyboard все отлично работает:

@objc func dismissKeyboard(sender: Any) {
    self.view.endEditing(true)
}

Однако у меня есть кнопка меню (миниатюра изображения), реализованная как контроллер дочернего представления (UIViewController) в том же представлении EditMessage, которое перехватывает экран с помощью UIApplication.shared.keyWindow() для отображения наложения и меню в нижней части экран. Построен с использованием модели / кода из канала Брайана Вонга YouTube для воспроизведения слайда в стиле YouTube в меню снизу. Тем не менее, клавиатура в пути. Поскольку дочерний объект является другим контроллером представления «endEditing» не работает (или, возможно, я ссылаюсь на неправильное представление?).

class ButtonPickerController : UIViewController, 
UIGestureRecognizerDelegate, UINavigationControllerDelegate {

var maxSize = CGFloat(60)

let thumbnail: UIImageView = {
    let thumbnail = UIImageView()
    thumbnail.backgroundColor = UIColor.lightGray
    return thumbnail
}()

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.buttonTapped(sender:)))
    tap.delegate = self
    view.addGestureRecognizer(tap)
    //view.backgroundColor = .yellow
    view.contentMode = .scaleAspectFit
    thumbnail.frame = CGRect(x: 0, y: 0, width: self.maxSize, height: self.maxSize)
    setupSubviews()
}

Может ли кто-нибудь указать мне правильное направление? Это мой первый вопрос, надеюсь, я правильно его задаю.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я понял это в конце. Спасибо вам за помощь. В моем дочернем контроллере представления я использовал следующее утверждение, когда кнопка была нажата:

@objc func buttonTapped(sender: UITapGestureRecognizer? = nil) {
    self.parent!.view.endEditing(true)
}
0 голосов
/ 27 апреля 2018

Во-первых, это не очень хороший способ представить оверлеи как UIViewController.

Но хорошим решением будет дать второму viewcontroller ссылку на первый до вызова viewDidLoad. Вы используете Segue с? Так что в prepare было бы правильное место. Во втором viewcontroller вы создаете свойство для первого и затем используете это свойство в качестве цели при создании UITapGestureRecognizer.

Другой способ - использовать протокол и делегирование.

...