2016-01-18 5 views
4

Любая идея, как получить inputAccessoryView для привязки к панели вкладок, а не к нижней части экрана?InputAccessoryView охватывает нижнюю панель

Я создал UIViewController и переопределен следующие методы:

-(BOOL)canBecomeFirstResponder { 
    return YES; 
} 

-(UIView *)inputAccessoryView { 

    CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, 44); 

    self.keyboardInputAccessoryView =[[BRKeyboardInputBarView alloc] initWithFrame:frame leftButtonTitle:@"Left" andRightButtonTitle:@"Send"]; 
    [self.keyboardInputAccessoryView setDelegate:self]; 
    [self.keyboardInputAccessoryView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.keyboardInputAccessoryView removeFromSuperview]; 

    return self.keyboardInputAccessoryView; 
} 

View controller with inputAccessoryView covering the tab bar

Взгляды него контроллер вида добавляет вид окна, а не текущий вид контроллеров зрения, что объяснит его позиционирование. Однако, если я удалить строку:

[self.keyboardInputAccessoryView removeFromSuperview]; 

Я получаю сбой при постукиваю в TextView моего зрения аксессуара:

The view hierarchy is not prepared for the constraint:<NSLayoutConstraint:0x7fa0c2ca5f80 BRKeyboardInputBarView:0x7fa0c2d6fad0.bottom == UIInputSetContainerView:0x7fa0c295a2c0.bottom> 

Так что я думаю, что я спрашиваю, что такое правильный способ добавьте вид аксессуаров для клавиатуры, чтобы он отлично сочетался с автоматической компоновкой и избегал краха, но также привязывался к виду, а не к окну?

+0

Мне кажется странным, что _accessoryView_ существует вообще, когда клавиатура не работает, так как это не по умолчанию; входной аксессуар должен исчезнуть с клавиатуры. Я думаю, вам будет лучше отслеживать высоту клавиатуры и продвигаться вперед, когда вызывается первый вызовResponder? Что-то вроде строки UIKeyboardDidShowNotification и ответ на этот вопрос: http://stackoverflow.com/questions/25874975/cant-get-correct-value-of-keyboard-height-in-ios8 – SunburstEnzo

ответ

0

Что вы видите, это правильное поведение.

Результаты, которые вы видите, связаны с тем, что UIViewController является подклассом UIResponder. Переопределяя inputAccessoryView и возвращая экземпляр вида, UIViewController позаботится о том, чтобы разместить это представление в нижней части экрана и соответствующим образом анимировать его, когда клавиатура появляется или исчезает.

Если вы хотите добавить эту панель поверх вашей клавиатуры, вам необходимо установить свойство inputAccessoryView текстаField/textView для вашего пользовательского представления.