2013-08-14 2 views
16

Как перемещать UITextView Вверх и вниз, когда вы начинаете вводить какое-то значение. Как и в TextField, мы используем его метод делегирования. Что делать в случае UITextView?Как сделать UITextView перемещаться вверх, когда присутствует клавиатура

+0

'textFieldDidBecomeActive'> переместить текстовое поле соответственно. –

+0

http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard-is-present см. Ссылку –

+1

Является ли поиск трудным в использовании? Даже если это так, посмотрите на боковую панель: она показывает вам связанные вопросы. – Abizern

ответ

19

При редактировании полного представления будет двигаться вверх и после завершения редактирования съедет ...

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    [self animateTextView: YES]; 
} 

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    [self animateTextView:NO]; 
    } 

- (void) animateTextView:(BOOL) up 
    { 
     const int movementDistance =heightKeyboard; // tweak as needed 
     const float movementDuration = 0.3f; // tweak as needed 
     int movement= movement = (up ? -movementDistance : movementDistance); 
     NSLog(@"%d",movement); 

     [UIView beginAnimations: @"anim" context: nil]; 
     [UIView setAnimationBeginsFromCurrentState: YES]; 
     [UIView setAnimationDuration: movementDuration]; 
     self.view.frame = CGRectOffset(self.inputView.frame, 0, movement); 
     [UIView commitAnimations]; 
    } 

Я надеюсь, что это поможет ...

+2

Hum, вы должны использовать блок для анимации, ваш метод не рекомендуется, так как iOS4 – Beuj

+1

Я столкнулся с множеством проблем с этим кодом. разрешил его, заменив «self.inputView.frame» на «self.view.frame». – Rajesh

+0

Когда вы не можете использовать решение с scrollview, это самый простой и лучший способ. –

2
#define kOFFSET_FOR_KEYBOARD 80.0 

-(void)keyboardWillShow { 
    // Animate the current view out of the way 
    if (self.view.frame.origin.y >= 0) 
    { 
     [self setViewMovedUp:YES]; 
    } 
    else if (self.view.frame.origin.y < 0) 
    { 
     [self setViewMovedUp:NO]; 
    } 
} 

-(void)keyboardWillHide { 
    if (self.view.frame.origin.y >= 0) 
    { 
     [self setViewMovedUp:YES]; 
    } 
    else if (self.view.frame.origin.y < 0) 
    { 
     [self setViewMovedUp:NO]; 
    } 
} 

-(void)textFieldDidBeginEditing:(UITextField *)sender 
{ 
    if ([sender isEqual:mailTf]) 
    { 
     //move the main view, so that the keyboard does not hide it. 
     if (self.view.frame.origin.y >= 0) 
     { 
      [self setViewMovedUp:YES]; 
     } 
    } 
} 

//method to move the view up/down whenever the keyboard is shown/dismissed 
-(void)setViewMovedUp:(BOOL)movedUp 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; // if you want to slide up the view 

    CGRect rect = self.view.frame; 
    if (movedUp) 
    { 
     // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
     // 2. increase the size of the view so that the area behind the keyboard is covered up. 
     rect.origin.y -= kOFFSET_FOR_KEYBOARD; 
     rect.size.height += kOFFSET_FOR_KEYBOARD; 
    } 
    else 
    { 
     // revert back to the normal state. 
     rect.origin.y += kOFFSET_FOR_KEYBOARD; 
     rect.size.height -= kOFFSET_FOR_KEYBOARD; 
    } 
    self.view.frame = rect; 

    [UIView commitAnimations]; 
} 


- (void)viewWillAppear:(BOOL)animated 
{ 
    // register for keyboard notifications 
    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

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

- (void)viewWillDisappear:(BOOL)animated 
{ 
    // unregister for keyboard notifications while not visible. 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

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

попробуйте этот код .....

+0

есть alredy вопрос на том же ... –

+2

Annnnnddd вы должны использовать блок для анимации, ваш метод не рекомендуется, так как iOS4 ... – Beuj

+0

Это ответ для textField, а не textView. – Shmidt

3

Я сделал, изменив структуру.

-(void)textViewDidBeginEditing:(UITextView *)textView{ 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:viewMsg cache:YES]; 
viewMsg.frame = CGRectMake(10, 50, 300, 200); 
[UIView commitAnimations]; 

NSLog(@"Started editing target!"); 

} 

-(void)textViewDidEndEditing:(UITextView *)textView 
{ 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:viewMsg cache:YES]; 
viewMsg.frame = CGRectMake(10, 150, 300, 200); 
[UIView commitAnimations]; 
} 
5

Вот пример кода, который автоматически будет обрабатывать клавиатуру. Keyboard avoiding

Если вы используете TableView, то ваш Tableview должен быть подклассом TPKeyboardAvoidingTableView и если вы используете Scrollview, то ваш Scrollview должен быть подклассом TPKeyboardAvoidingScrollView. И эта библиотека автоматически сделает клавиатуру для вас.

4

Я предлагаю вам взглянуть на this guide

в частности в разделе: Переведенный контент, который находится под клавиатурой. Я использовал этот подход успешно несколько раз.