UISplitViewController только для подробностей inputAccessoryView

Я пытаюсь имитировать приложение Apple iMessage с точки зрения панели инструментов ввода сообщений. У Apple есть UIToolbar, который является входным вспомогательным представлением UITextView, которое оно содержит, а также inputAccessoryView фактического представления. Таким образом, панель инструментов всегда присутствует, а когда появляется клавиатура, она перемещается вместе с клавиатурой.

На iPad они, кажется, имеют UISplitViewController, а панель инструментов является частью контроллера подробного представления. Теперь, когда у меня такие же настройки, панель инструментов ввода вспомогательного представления моего подробного представления растягивается на всю ширину, поэтому, как и клавиатура, она также перекрывает контроллер основного представления. Apple, с другой стороны, каким-то образом удалось ограничить входной аксессуар ограничениями подробного представления.

Как я могу это сделать?


person arik    schedule 11.07.2014    source источник
comment
Я решил это по-другому, подобно тому, как Apple реализовала это в своем собственном приложении «Сообщения». Если кому интересно, могу выложить свое решение.   -  person Leo Natan    schedule 28.07.2015
comment
@LeoNatan Мне более чем интересно. Я УМИРАЮ узнать, как Apple это реализовала. Пожалуйста, опубликуйте свое решение!   -  person arik    schedule 28.07.2015
comment
Только сейчас увидел этот комментарий. Сделаю завтра на работе, когда буду рядом со своим кодом.   -  person Leo Natan    schedule 28.07.2015


Ответы (2)


Невозможно иметь inputAccessoryView только для одного viewController в UISplitViewController. Мой способ сделать это - иметь inputAccessoryView в качестве контейнера и иметь в нем подвид со смещением 320px.


 - (void)setFrame:(CGRect)frame
{
    if (RUNNING_ON_IPAD)
    {
        CGFloat superviewWidth = self.superview.bounds.size.width;

        CGFloat offset = 321.f;
        frame.origin.x = offset;
        frame.size.width = superviewWidth - offset;
    }

    [super setFrame:frame];

}
person Nikita Ivaniushchenko    schedule 29.07.2014
comment
Эй, извини, я не видел твоего письма. Могу я спросить, какой адрес вы использовали? - person arik; 29.07.2014

Вместо использования inputAccessoryView просто добавьте свой аксессуарView в качестве подпредставления в нижней части соответствующего представления. Затем синхронизируйте движение с клавиатурой, как описано здесь: Синхронизация анимаций в клавиатуреWillShow keyboardWillHide — аппаратная клавиатура и виртуальная клавиатура одновременно

person user1055568    schedule 27.01.2017
comment
Это не сработает при перемещении незакрепленной клавиатуры на iPad, потому что события будут срабатывать только после завершения движения клавиатуры. - person arik; 27.01.2017
comment
Хорошая точка зрения. Возможно, лучший вариант — создать 2 идентичных представления аксессуаров, одно в качестве подпредставления для активации клавиатуры, а второе — в качестве inputAccessoryView, когда клавиатура видна. Или, возможно, один вид может попеременно играть эти роли, хотя я не мог заставить это работать. - person user1055568; 30.01.2017