Выход из окна ввода AccessViewView после клавиатуры отклоняется iOS8?

Я хочу сделать такое поведение, как приложение для обмена сообщениями. Я просматривал Qaru для решений для этого, и действительно есть много:

Выход из входного окна Просмотр видимости после отклонения клавиатуры

Это я нашел. Но, похоже, в iOS8 ситуация немного отличается. Если я делаю то же самое в новом iOS8 sdk, я получаю ошибку:

'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should have parent view controller:<ViewController: 0x7fdcb3b1e9f0> but requested parent is:<UIInputWindowController: 0x7fdcb684c000>'

Чтобы проверить это, я сделал пример проекта, только один контроллер с представлением внизу:

ViewController code

Storyboard

Выход подключен к виду снизу, на котором есть только UITextField. Я что-то упускаю и как мне получить желаемое поведение?

Ответ 2

Вы добавляете someView к нескольким супервирусам, что приводит к несогласованным иерархиям (что он говорит вам).

Когда клавиатура активируется, она вызывает метод inputAccessoryView(), чтобы увидеть, нужно ли ей что-либо наклеить на клавиатуре и добавляет ее в свой собственный superView. Но вы уже добавили его в представление через свою раскадровку.

Теперь есть два способа решить эту проблему:

  • Сделайте .xib с вашим представлением и верните его в свой inputAccessoryView(), не добавляя его в какой-либо супервизор (клавиатура будет.

  • Или сделайте это полностью с помощью NSLayoutConstraint.

Вы можете добавить следующий код в свой ViewController, который будет сохраняться, даже если клавиатура скрыта.

override func canBecomeFirstResponder() -> Bool {
    return true
}

Посмотрите этот репозиторий GitHub для примера.