Я создаю чат, который работает аналогично приведенному ниже:

enter image description here

Когда пользователь щелкает всплывающее сообщение, мне нужно, чтобы он поднял как UITextField, так и UITableView (конечно, с табличным представлением над текстовым полем). Точно так же, когда они отправляют или отзывают сообщение, оно должно вернуться к тому, что было.

Я попробовал опубликованное решение здесь

Два уведомления:

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

И фактическая функция:

- (void)keyboardWillHideOrShow:(NSNotification *)note
{
    NSDictionary *userInfo = note.userInfo;
    NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];

    CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect keyboardFrameForTextField = [self.myTextField.superview convertRect:keyboardFrame fromView:nil];

    CGRect newTextFieldFrame = self.myTextField.frame;
    newTextFieldFrame.origin.y = keyboardFrameForTextField.origin.y - newTextFieldFrame.size.height;

    [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
        self.myTextField.frame = newTextFieldFrame;
    } completion:nil];
}

Но у него есть две проблемы:

  1. Я не уверен, как поднять табличный вид поверх клавиатуры
  2. Когда клавиатура возвращается в исходное положение, поле ввода полностью исчезает.
1
john bickers 12 Янв 2013 в 05:31
2
Возможно, дубликат: stackoverflow.com/questions/9135248/…
 – 
Carl Veazey
12 Янв 2013 в 05:55
Спасибо, я использовал ваш код для начала, но есть ли способ получить переменные, чтобы вернуть текстовое поле обратно к его исходным координатам и размеру вместо того, чтобы вручную вводить координаты x, y?
 – 
john bickers
12 Янв 2013 в 06:29
Да, просто добавьте переменную экземпляра ...
 – 
Carl Veazey
12 Янв 2013 в 06:32

1 ответ

Лучший ответ

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

Это будет перемещать представление вверх и вниз, когда клавиатура вызывается / закрывается на основе значения BOOL ДА или НЕТ. Этот способ также позволяет вам иметь немного больше контроля над другими его аспектами.

- (void) animateTextField: (UITextField*) textField up: (BOOL)up
{
const int movementDistance = 100;
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];
}

А затем реализовать это:

-(IBAction)goingup:(id)sender
{
   //Bounces the text field up for editing
   [self animateTextField: yourtextfield up: YES];} 
}


-(IBAction)backdown:(id)sender
{
   //Bounces it back when keyboard is dismissed 
   [self animateTextField: yourtextfield up: NO];   
}

Подключите действия к вашим текстовым полям. Редактирование действительно началось, а Редактирование закончилось, и все готово.

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

2
Dana K 12 Янв 2013 в 07:07