2015-02-13 2 views
3

Я хочу сделать поведение, как приложение для обмена сообщениями. Я просматривал Переполнение стека решений для этого, и в самом деле есть много:Выход из входного окна Просмотр вида после клавиатуры отключен iOS8?

Leaving inputAccessoryView visible after keyboard is dismissed

Это был один, что я нашел. Но, похоже, что-то немного отличается от 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. Я что-то упускаю и как мне получить желаемое поведение?

+1

вы пробовали его инициализации UIView в коде, и сделать сильную ссылку на него? – arik

+0

Да, результат тот же – MegaManX

+0

Очень странно. Хорошо, последний вопрос - какую версию Xcode вы используете? Включая номера сборки и все такое? – arik

ответ

2

iOS8 имеет цикл удержания с inputAccessoryView. Вот хороший пост, который, кажется, хорошее решение:

http://derpturkey.com/uitextfield-docked-like-ios-messenger/

+0

Одной большой проблемой с использованием этого обходного пути, который реализует inputAccessoryView на представлении вместо контроллера вида, является то, что анимация аксессуаров не согласована с представлением при нажатии контроллера представления в стеке навигации. Вместо того, чтобы быть анимированным с представлением контроллера вида и перемещаться вместе с ним, аксессуар выглядит анимированным снизу, в то время как представление контроллера просмотра перемещается справа. – kball

2

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

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

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

  1. Сделать в .xib с вашей точкой зрения и возвращающий, что один в вашем inputAccessoryView(), не добавляя его в любом надтаблицы самостоятельно (клавиатура будет

  2. .
  3. Или сделать его полностью в коде с помощью NSLayoutConstraint.

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

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

Посмотрите на this GitHub repo для примера.

Смежные вопросы