2013-02-28 4 views
0

Я пытаюсь переместить форму, когда отображается клавиатура, мой подход - проверить, пересекается ли кадр клавиатуры и рамки текстового поля.Проверьте, скрывает ли клавиатура текстовое поле, когда оно отображается

- (void)keyboardDidShow:(NSNotification *)notification 
{ 


    // Get the size of the keyboard. 
    CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 

    //Test whether the current frame of the text field is hidden by the keyboard 

    if (!CGRectIsNull(CGRectIntersection(keyboardFrame,self.activeField.frame))) { 
     NSLog(@"Key board frame intersects with the text field frame"); 
    } 


} 

В вышеуказанном коде CGRectIsNull всегда возвращает null.

А заявления отладки вернуть мне эту информация о клавиатуре и активном текстовом поле выбирается в виде:

Клавиатура Размер = (ширина = 352, высота = 1024) клавиатура происхождения = (х = -352 , у = 0)

доска для ключей рамы = (-352,0,352,1024) Текстовое поле кадра = (200, 15, 300, 30)

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

ответ

0

Я бы поставил всю вещь в полноэкранном режиме UIScrollView и затем изменить его при необходимости ...

// This in your init somewhere 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil]; 

-(void) keyboardWillChange:(NSNotification*)notify { 

    CGRect endFrame; 
    float duration = [[[notify userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    [[[notify userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame]; 
    endFrame = [self.view convertRect:endFrame fromView:nil]; 
    float y = (endFrame.origin.y > self.view.bounds.size.height ? self.view.bounds.size.height : endFrame.origin.y); 

    [UIView animateWithDuration:duration animations:^{ 
     scrollView.frame = CGRectMake(0, 0, self.view.bounds.size.width, y); 
    }]; 

} 
-1

Попробуйте это:

[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {}]; 

и использовать информацию от [note userInfo];

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