2012-03-10 4 views
1

Прошу прощения за мой английский язык.Перемещение UIView при появлении клавиатуры

Я попытался найти, прежде чем он начнет действовать. Но проблема в том, что ViewController в пейзажной зоне и создал UIView половину ViewController. В UIView есть UITextView. Но теперь, когда клавиатура появляется фон в ViewController, прокрутите вниз под клавиатурой. И посмотрите только UIView. Если коснитесь места, клавиатура исчезнет, ​​а задний фон возвращается. Я хочу просто переместить UIView при появлении клавиатуры.

спасибо.

ответ

10

попробовать это

- (void)viewDidAppear:(BOOL)animated 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 

- (void)keyboardWillShow:(NSNotification *)note 
{ 
    CGRect keyboardBounds; 
    NSValue *aValue = [note.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey]; 

    [aValue getValue:&keyboardBounds]; 
    keyboardHeight = keyboardBounds.size.height; 
    if (!keyboardIsShowing) 
    { 
     keyboardIsShowing = YES; 
     CGRect frame = view.frame; 
     frame.size.height -= 168; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:0.3f]; 
     view.frame = frame; 
     [UIView commitAnimations]; 
    } 
} 

- (void)keyboardWillHide:(NSNotification *)note 
{ 
    CGRect keyboardBounds; 
    NSValue *aValue = [note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey]; 
    [aValue getValue: &keyboardBounds]; 

    keyboardHeight = keyboardBounds.size.height; 
    if (keyboardIsShowing) 
    { 
     keyboardIsShowing = NO; 
     CGRect frame = view.frame; 
     frame.size.height += 168; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:0.3f]; 
     view.frame = frame; 
     [UIView commitAnimations]; 

    } 
} 
+2

Вы должны добавить супер вызов в вашем 'viewDidAppear'. – jack

1

This answer похоже, что это может быть то, что вы ищете.

Короче:

  1. Detect, когда клавиатура появляется с UIKeyboardDidShowNotification.

  2. user info для этого уведомления описывает рамку клавиатуры.

  3. Отрегулируйте рамки (ы) вашего вида (ов), чтобы вытащить их из-под клавиатуры.