2013-11-18 4 views
-2

Я полный новичок в Qbjectives-C.Как нажимать содержимое вверх, когда появляется клавиатура?

Я видел, что этот вопрос задавали раньше, но я не совсем понял его из ответов, представленных там.

+0

Man .. снова дублировать .. Пожалуйста, имейте в виду правила StalkOverFlow .. и пожалуйста, borad your dictionary .. :) :) –

ответ

-1

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

#define kKeyboardAnimationDuration 0.3 
@interface YourViewController:UIViewController 
{ 
    BOOL keyboardIsShown; 
} 

И тогда в вашей реализации

- (void)viewDidLoad 
{ 
// register for keyboard notifications 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:self.view.window]; 
    // register for keyboard notifications 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillHide:) 
               name:UIKeyboardWillHideNotification 
               object:self.view.window]; 

    keyboardIsShown = NO; 
} 

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 

    // unregister for keyboard notifications while not visible. 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:UIKeyboardWillShowNotification 
                object:nil]; 
    // unregister for keyboard notifications while not visible. 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:UIKeyboardWillHideNotification 
                object:nil]; 
} 

#pragma mark - Keyboard Events 
- (void)keyboardWillShow:(NSNotification *)n 
{ 
    if (keyboardIsShown) 
    { 
     return; 
    } 

    NSDictionary* userInfo = [n userInfo]; 
    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y-= (keyboardSize.height); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:kKeyboardAnimationDuration]; 
    [self.view setFrame:viewFrame]; 
    [UIView commitAnimations]; 

    keyboardIsShown = YES; 
} 

- (void)keyboardWillHide:(NSNotification *)n 
{ 
    NSDictionary* userInfo = [n userInfo]; 
    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y+= (keyboardSize.height); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:kKeyboardAnimationDuration]; 
    [self.view setFrame:viewFrame]; 
    [UIView commitAnimations]; 

    keyboardIsShown = NO; 
} 
+0

Я помещаю первый фрагмент кода в файл .h, а второй более длинный бит в файл .m? – user2731202

+0

есть. Вы можете объявить переменные (keyboardIsSown) и макросы (kKeyboardAnimationDuration) в файле .h, и вы должны зарегистрироваться и использовать уведомление в файле .m – PgmFreek

-2

вид использования прокрутки нажать контент, когда появляется клавиатура.

Используйте это, "TPKeyboardAvoidingScrollView", от:

https://github.com/michaeltyson/TPKeyboardAvoiding

работает действительно хорошо.

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