клавиатураWillShowNotification крайний случай - PullRequest
1 голос
/ 25 июля 2011

Это проблема порядка операций

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];    
[nc addObserver:self 
       selector:@selector(keyboardWillShow:) 
           name:UIKeyboardWillShowNotification 
         object:nil];
[nc addObserver:self 
       selector:@selector(keyboardWillHide:) 
           name:UIKeyboardWillHideNotification 
         object:nil];

А затем я добавляю текстовое поле к UITableViewCell:

[textField addTarget:self 
              action:@selector(textFieldBegin:) 
    forControlEvents:UIControlEventEditingDidBegin];

[cell addSubview:textField];

В textFieldBegin я scrollToRowAtIndexPath, чтобы перейти к редактируемой ячейке.
В клавиатуреWillShow я настраиваю рамку tableView, чтобы учесть клавиатуру.
textFieldBegin вызывается до keyboardWillShow , поэтому при первом показе у него нет места для прокрутки.

Есть ли один из способов исправить это упущение?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

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

Я думаю, что это позволит вам хранить различные анимации там, где они должны.

0 голосов
/ 25 июля 2011

Вместо прослушивания UIKeyboardWillShowNotification вы можете отреагировать на метод UITextFieldDelegate textFieldDidBeginEditing: и изменить его размер / прокрутку в этом методе, поскольку он вызывается после , когда отображается клавиатура.

...