2012-03-04 4 views
0

В моем приложении у меня есть UITextView, который находится в нижней части экрана. Так что я делаю это следующий код, но проблема в том, что если текст, который я нажимаю на UITextView, находится ниже клавиатуры, он будет правильно прокручиваться над клавиатурой.Клавиатура иногда блокирует UITextView

Вот как я зарегистрировать NSNotifications: (В ViewDidLoad)

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWasShown:) 
              name:UIKeyboardDidShowNotification object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWasHidden:) 
              name:UIKeyboardWillHideNotification object:nil]; 

Методы:

-(void)keyboardWasShown:(NSNotification*)aNotification { 
    NSDictionary *info = [aNotification userInfo]; 

    // Get the size of the keyboard. 
    NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey]; 
    keyboardSize = [aValue CGRectValue].size; 

    // Resize the scroll view (which is the root view of the window) 
    CGRect viewFrame = [textView frame]; 

    viewFrame.size.height -= keyboardSize.height; 

    textView.frame = viewFrame; 

    // Scroll the active text field into view. 
    //CGRect textFieldRect = [activeField frame]; 
    [textView scrollRectToVisible:viewFrame animated:YES]; 
} 

-(void)keyboardWasHidden:(NSNotification*)aNotification { 
    // Reset the height of the scroll view to its original value 
    CGRect viewFrame = [textView frame]; 
    viewFrame.size.height += keyboardSize.height; 
    textView.frame = viewFrame; 
} 

Как Разрегистрируйте NSNotifications: В ViewDidUnload:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; 

Кто-нибудь видит что-то не так?

Спасибо!

+0

Если только свиток не существует, проверьте расчёт и движение кадра. Это может пойти не так. – cocoakomali

+0

Что я должен делать NSLog, я отправлю его, потому что все эти значения очень сбивают с толку. Может быть, кто-то еще увидит мои проблемы, когда я опубликую эти значения. –

+0

Вы должны напечатать оригинальную рамку представления, размер клавиатуры и, наконец, измененную рамку просмотра. – cocoakomali

ответ

0

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

-(void)textViewDidBeginEditing:(UITextView *)textView { //Keyboard becomes visible 

    //perform actions. 
    NSLog(@"IN VIEW"); 
    [self scrollTheViewToTop:self.scroller forTheTextView:textView]; 
} 
- (void)textViewDidEndEditing:(UITextView *)textView { 
    [self.scroller setContentOffset:CGPointZero animated:YES]; 
} 
- (void)scrollTheViewToTop:(UIScrollView *)scrollView forTheTextView:(UITextView *)textView { 

    //Scroll the ScrollView Up tp show the Continue button in the bottom is visible. 

    CGPoint pt; 
    CGRect rc = [textView bounds]; 
    rc = [textView convertRect:rc toView:scrollView]; 
    pt = rc.origin; 
    pt.x = 0; 
    pt.y -= 60; 
    [scrollView setContentOffset:pt animated:YES]; 
} 
Смежные вопросы