3

У меня есть UIViewController, тогда с этим кодом я представляю контроллер модального представления для ввода пароля.клавиатура, не появляющаяся после возврата от ModalViewController

[self performSegueWithIdentifier:@"SeguePassword" sender:self]; 

в раскадровке:

Раскадровка Segue Identifier = SeguePassword Style = Модальный Переход = по умолчанию одушевляет = не проверено

При нажатии "Отмена" на модальных, который имеет следующие код:

[self dismissViewControllerAnimated:NO completion:^{}]; 

Теперь, когда я получаю b ack клавиатура скрыта. У меня есть код, показывающий панель инструментов с кнопкой hide. И я вижу это, но не клавиатуру.

Есть ли у кого-нибудь идеи или указания, которые они предприняли для решения такой проблемы? Кажется, что в последнее время начались после преобразования изменений для прошивки 7.

Мое решение:

Я нашел это потому, что после того, как я нажал, но на окне предупреждения несколько раз из-за расстройство я видел клавиатуру в неправильной ориентации , I.e .., пейзажная клавиатура, когда приложение является портретом только на iPhone.

До:

- (NSUInteger) supportedInterfaceOrientations { 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; 
} else { 
    **return (UIInterfaceOrientationPortrait);** 
} 

}

После:

- (NSUInteger) supportedInterfaceOrientations { 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; 
} else { 
    **return (UIInterfaceOrientationMaskPortrait);** 
} 

}

Я изменил портрет использовать маски целое, и все начали работать снова.

+0

вы использовали 'UIKeyboardWillShow/HideNotification'? – user2277872

+0

Я использую textBegingEdit Protocols, и он отлично работает в первый раз на странице входа, и они также отображаются в окне модального пароля. Но когда я отклоняю пароль, клавиатура больше не появляется, хотя на панели инструментов на клавиатуре это делается. Если я войду в систему, набрав на клавиатуре ноутбука и выйдя из системы, он снова отлично работает. –

+0

Изменение 'UIInterfaceOrientationPortrait'' 'UIInterfaceOrientationMaskPortrait' также решило это для меня. – Numereyes

ответ

0

Клавиатура видна только в том случае, если какой-либо объект является первымResponder. Посмотрите документацию для класса UIResponder.

Если ваш modal view controller использует клавиатуру, которая звучит так, как будто она имеет статус первого ответчика, и все, что было на вашем исходном экране, теряет его. Если вы хотите вернуться в одно и то же состояние с контроллера модального представления, то с некоторым объектом, имеющим фокус ввода, т. Е. Являющимся первымResponder, - при видимой клавиатуре вам придется писать код, чтобы это произошло. В частности, исходный контроллер представления должен знать, когда модальный контроллер представления заканчивается так, что он может сделать свой входной объект, TextField или TextView или любой другой, быть первым ответчиком с утверждением:

[objectIWantToBeFirstResponder becomeFirstResponder]; 

Теперь, как вы знаете, когда установлен контроллер модального просмотра? Есть пара очевидных приемов.

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

Поскольку вы вручную запускаете segue, возможно, , вы готовы представить modal view controller в коде. Если да, то вы можете использовать блок завершения:

ModalViewControllerClass *vc = [[ModalViewControllerClass alloc] init]; 
    // whatever else you need to do to the vc 
    [self presentViewController:vc animated:YESorNO completion:^{ 
     // This code gets executed when the presented view controller exits 
     [objectIWantToBeFirstResponder becomeFirstResponder]; 
    }]; 
+0

Спасибо, что нашли время ответить на этот вопрос. Это не сработало, но я анализирую код, чтобы найти дыру. –

+0

Итак, когда я вернусь к исходному виду, я попробовал в viewDidAppear вызов [self getFirstResponder], так как я не хочу, чтобы клавиатура отображалась под ними, они нажимают на текстовое поле. Несмотря на то, что клавиатура не показывалась, я нажал кнопку входа с пустым идентификатором, а шоу UIAlertBox, а затем половину клавиатуры в ландшафтном представлении, тогда как я всегда в портрете для версии для iPhone. –

+0

Я уверен, что это глупая ошибка, когда я нахожу ее. –

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