Программно выровняйте панель инструментов сверху клавиатуры iPhone

94
задан Cœur 7 June 2019 в 17:29
поделиться

5 ответов

Начиная с iOS 3.2 есть новый способ достижения этого эффекта:

UITextFields и UITextViews имеют свойство inputAccessoryView, которое вы можете установить на любое представление, которое автоматически отображается над клавиатурой и анимируется с ней.

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

142
ответ дан 24 November 2019 в 05:58
поделиться

Если Вы зарегистрируетесь для уведомлений о клавиатуре, т.е. UIKeyboardWillShowNotification UIKeyboardWillHideNotification, и т.д., то уведомление, которое Вы получаете, будет содержать границы клавиатуры в userInfo dict (UIKeyboardBoundsUserInfoKey).

Посмотрите UIWindow ссылка класса.

24
ответ дан raidfive 24 November 2019 в 05:58
поделиться

Так в основном:

В init методе:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil];

И затем упомянули методы выше, чтобы отрегулировать положение панели:

-(void) keyboardWillShow:(NSNotification *) note
{
    CGRect r  = bar.frame, t;
    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t];
    r.origin.y -=  t.size.height;
    bar.frame = r;
}

Мог сделать его симпатичным путем анимации изменения положения путем обертывания его в

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
//...
    [UIView commitAnimations];
72
ответ дан 24 November 2019 в 05:58
поделиться

Нет никакого пути (AFAIK) для получения размеров представления клавиатуры. Это однако постоянно, по крайней мере, в каждой версии iPhone до сих пор.

, Если Вы вычисляете позицию панели инструментов смещения от НИЖНЕЙ ЧАСТИ Вашего представления и принимаете размер во внимание Вашего представления, тогда Вам не придется волноваться, присутствует ли navbar или нет.

, Например,

#define KEYBOARD_HEIGHT 240 // example - can't remember the exact size
#define TOOLBAR_HEIGHT 30

toolBarRect.origin.y = viewRect.size.height - KEYBOARD_HEIGHT - TOOLBAR_HEIGHT;

// move toolbar either directly or with an animation

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

Также это может зависеть от того, где Вы делаете это расположение, поскольку возможно, что размер Вашего представления может измениться между тем, чтобы быть загруженным и показанный на основе Вашей установки navbar. Я полагаю, что лучшее место, чтобы сделать это было бы в viewWillAppear.

-3
ответ дан Rui Peres 24 November 2019 в 05:58
поделиться

В 3.0 и выше вы можете получить длительность и кривую анимации из словаря уведомлений userInfo.

например, чтобы анимировать размер вида, чтобы освободить место для клавиатуры, зарегистрируйтесь на UIKeyboardWillShowNotification и сделайте что-нибудь вроде следующего:

- (void)keyboardWillShow:(NSNotification *)notification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
    [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];

    CGRect frame = self.view.frame;
    frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height;
    self.view.frame = frame;

    [UIView commitAnimations];
}

Сделайте аналогичную анимацию для UIKeyboardWillHideNotification.

16
ответ дан 24 November 2019 в 05:58
поделиться