В приложении для iPhone у меня есть пользовательская клавиатура, которая работает как стандартная клавиатура; появляется, если пользовательское текстовое поле становится первым респондентом и скрывается, если поле уходит в отставку первым респондентом. Я также выкладываю Generic UIKeyboardWillShowNotification
, UIKeyboardDidShowNotification
и их скрывающие аналоги, например:
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:5];
[userInfo setObject:[NSValue valueWithCGPoint:self.center]
forKey:UIKeyboardCenterBeginUserInfoKey];
[userInfo setObject:[NSValue valueWithCGPoint:shownCenter]
forKey:UIKeyboardCenterEndUserInfoKey];
[userInfo setObject:[NSValue valueWithCGRect:self.bounds]
forKey:UIKeyboardBoundsUserInfoKey];
[userInfo setObject:[NSNumber numberWithInt:UIViewAnimationCurveEaseOut]
forKey:UIKeyboardAnimationCurveUserInfoKey];
[userInfo setObject:[NSNumber numberWithDouble:thisAnimDuration]
forKey:UIKeyboardAnimationDurationUserInfoKey];
[[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillShowNotification
object:nil
userInfo:userInfo];
Этот код работает, и я использую его в UIViewController
подклассах.
Теперь, поскольку iPhone OS 3.0 , UITableViewController
автоматически изменяет размер своего TableView, когда системные клавиатуры показывают и скрывают. Я только сейчас компилирую под 3.0, и я подумал, что контроллер должен также изменить размер таблицы, если появится моя пользовательская клавиатура, так как я публикую то же самое уведомление. Однако это не так. Контроллер табличного представления устанавливается как делегат полей ввода.
У кого-нибудь есть идея, почему это может иметь место? Кто-нибудь успешно реализовал нечто подобное?
У меня есть стандартные поля ввода вдоль пользовательских, поэтому, если пользователь меняет поля, стандартная клавиатура скрывает и показывает пользовательскую. Было бы полезно, если tableView не изменил размеры до полной высоты, и мне не пришлось изменять его размер обратно с помощью пользовательского метода.