2013-03-19 4 views
2

У меня проблема с прерывистой ситуацией, когда клавиатура не отображается на UITextField.Клавиатура, не отображающая UITextField

Это происходит чаще всего, но не каждый раз.

Я действительно не могу точно определить действие, которое его вызывает.

Я подписался на UIKeyboardDidShowNotification и уведомление пользователя данные, что это:

0x15581730 {name = UIKeyboardDidShowNotification; userInfo = { 
    UIKeyboardAnimationCurveUserInfoKey = 0; 
    UIKeyboardAnimationDurationUserInfoKey = "0.25"; 
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 0}}"; 
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 568}"; 
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 568}"; 
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}"; 
    UIKeyboardFrameChangedByUserInteraction = 0; 
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}"; 
    }} 

NSRect: {{inf, inf}, {0, 0}}, кажется, проблема, так как эти два значения действительны, когда клавиатура делает шоу.

Приложение довольно стандартное. Это стек nav, и это происходит на контроллере представления около 4 уровней в стеке. Все делегаты текстового поля установлены, и я не вижу ничего странного в представлении или контроллере.

Кто-нибудь видел это раньше?

+0

Вы назначили некоторый пользовательский вид inputView вашего текстового поля? – Jeepston

+0

Вы установили делегат для UITextField ?? –

+0

Да, это не так просто. – tobyc

ответ

-1

набор

@interface UIController : UIViewController<UITextFieldDelegate> 

и назначить делегат данных вашего UITextField из XIb ..

4

вы можете вспомнить какую-либо деталь о вашем приложении? Я думаю, что это может быть связано с изменениями API ориентации iOS 6. У меня была такая же проблема, как и страдание от некоторых неинтуитивных ориентировочных поведений.

В частности, мое приложение указало UIInterfaceOrientationMaskPortraitUp как единственную допустимую ориентацию как в Info.plist, так и в корневой UIViewController supportedInterfaceOrientations:. Я также возвращал NO все время для shouldAutorotate из моего корневого UIViewController. Я использовал ориентацию UIDevice, чтобы определить, как представить мой дочерний UIViewControllers и установить ориентацию строки состояния с функцией типа отображаемого UIViewController и UIDeviceOrientation.

Это было довольно просто, но на iPad (это приложение для iPhone), при котором при запуске с ориентированной на ландшафт стартовой панели представленный UIViewController (и строка состояния) будет ориентирован перпендикулярно оконной раме и не будет вращаться назад.

Это также вызвало некоторые очень странные ошибки прерывистой ориентации/оконной рамы на iPhone 3GS, где рамке RootViewController давали некоторые глупые размеры, большие, чем устройство.

Что изменилось (в моем корневом UIViewController):

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutomaticallyForwardRotationMethods 
{ 
    return NO; 
} 

я больше не использовать ориентацию устройства, чтобы определить правильную ориентацию, полагаясь исключительно на класс UIViewController представляется (решено навигации) , Это имело ожидаемый эффект от решения простой ошибки ориентации iPad, но я не видел примеров необычной прерывистой ошибки ИЛИ ошибки клавиатуры, которую вы также имели.

0

Вы используете DCIntrospect на iOS 5.x симуляторе? Я получил ту же проблему и нашел неправильное значение UIKeyboardFrameBeginUserInfoKey вызвано DCIntrospect. DCIntrospect может попытаться изменить первого ответчика при получении уведомлений UIKeyboardWillHideNotification.См. Код:

- (void)takeFirstResponder 
{ 
    if (![self.inputTextView becomeFirstResponder]) 
     NSLog(@"DCIntrospect: Couldn't reclaim keyboard input. Is the keyboard used elsewhere?"); 
} 

Как правило, мы никогда не должны включать DCIntrospect в версию выпуска. Поэтому конечные пользователи не должны сталкиваться с этой проблемой.

Смежные вопросы