Сделать вид скользящим вверх, чтобы освободить место для клавиатуры? - PullRequest
4 голосов
/ 05 мая 2011

Я только начал учиться программировать приложения для iPhone, и я не могу понять, как заставить вид сдвинуться в сторону при появлении клавиатуры (чтобы вы все еще могли видеть текстовое поле, в котором вы печатаете).Как это сделать?

Ответы [ 5 ]

2 голосов
/ 05 мая 2011

Если все в порядке, проще всего переместить весь self.view.frame, а затем переместить его обратно вниз, когда закончите.

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3f;

- (void) animateForToNewYPosition:(int)newYPosition {
    // move for kdb
    if (self.view.frame.origin.y == newYPosition) {
        return;
    }

    // start animation
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];  

    // move it
    self.view.frame.origin.y = newYPosition;

    [UIView commitAnimations];  
}
1 голос
/ 05 мая 2011

Один из способов сделать это - поместить все в UIScrollView, а затем прокрутить содержимое вверх.Другой способ - это передвигать вид самостоятельно, обычно с помощью Core Animation, чтобы он выглядел хорошо.

Хорошее место для начала - документация.Есть даже раздел, озаглавленный «* 1004», «Подвижный контент, расположенный под клавиатурой» , который укажет вам правильное направление.

0 голосов
/ 20 октября 2011

Я обнаружил, что использование уведомлений клавиатуры лучше для моего приложения, чем использование протокола делегирования UITextField textFieldDidBeginEditing и textFieldDidEndEditing.Уведомления - клавиатура WillShow и клавиатура WillHide.Можно протестировать UITextField или UITextView, которые потребовали бы, чтобы представление перемещалось с этими уведомлениями, а затем условно перемещало представление.Преимущество моего приложения заключается в том, что у меня много UITextTields, а уведомления облегчают сохранение вида над клавиатурой, когда редактирование перемещается из одного поля в другое.

0 голосов
/ 03 октября 2011
  http://objectivecwithsuraj.blogspot.in/2012/06/making-view-slide-up-to-make-room-for.html

  Add a UIScrollview - scrollview to your UIView and set delegates for UITextFields & 
     UIScrollview

  - (BOOL)textFieldShouldReturn:(UITextField *)textField 
  {
     if (textField == txtFieldName)
   {
         [txtFieldCellNo becomeFirstResponder];
   }
   else if (textField == txtFieldCellNo)
   {
         [txtFieldEmail becomeFirstResponder];
   }
   else
  {
       [textField resignFirstResponder];

  }
return YES;
}

 - (void)textFieldDidBeginEditing:(UITextField *)textField
 {
    [self animateTextField:txtFieldName up:YES];
 }


- (void)textFieldDidEndEditing:(UITextField *)textField
{
   [self animateTextField:txtFieldEmail up:NO];
}


- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; 
    const float movementDuration = 0.3f;
    int movement = (up ? -movementDistance : movementDistance);
    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame,0, movement);
    [UIView commitAnimations];

}

0 голосов
/ 05 мая 2011

предположим, что вам нужно переместить вид вверх в текстовом поле с тэгом 4 (если у вас более 1 текстового поля и одно из них закрыто клавиатурой), а затем использовать метод делегата textField

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField   
{
if(textField.tag==4)
    CGRect viewFrame;
    viewFrame=self.view.frame;
    if(viewFrame.origin.y==-100)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:.3];
        viewFrame.origin.y+=100;
        self.view.frame=viewFrame;
        [UIView commitAnimations];
    }

}

это перемещает ваш взгляд.теперь для перемещения вниз вам нужен код в textField и другой метод делегата

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
   if(textField.tag==4)
{
 CGRect viewFrame;
    viewFrame=self.view.frame;
    if(viewFrame.origin.y==-100)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:.3];
        viewFrame.origin.y+=100;
        self.view.frame=viewFrame;
        [UIView commitAnimations];
    }
}
}

В случае просмотра текста вам нужна кнопка, а для перемещения вверх по представлению вам нужен этот делегат

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView

ииспользуйте тот же код, что и textField

. Для перемещения вниз вам нужна кнопка либо на панели навигации, либо на панели инструментов, и установите эту панель инструментов над клавиатурой с помощью той же анимации. Для кнопки вам нужен тот же код для перемещения вниз, что применимодля textField.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...