2013-04-26 5 views
7

У меня есть пользовательский вид (NotifyView), добавленный на UIWindow с кнопкой увольнения (который удаляет его с UIWindow). Этот вид добавляется, когда уведомление PUSH приходит в didReceiveRemoteNotification Есть несколько случаев, когда я мог бы быть на любом экране, а моя клавиатура UP через UITextfield/UITextview. На этом этапе, если наступает нажатие, NotifyView добавляется на UIWindow за клавиатурой. Я хочу уйти в отставку после того, как клавиатуры PUSH принимается так за то, что мог:удаление клавиатуры с экрана без вызова resignFirstResponder

  • опубликовать уведомление с NSNotificaitonCenter в отставку все TextFields/TextViews (если кто-то firstResponder). Для этого я должен держать активный указатель на текущее активное текстовое поле/текст во всех контроллерах.

  • сделать переменную в AppDelegate и присвоить ей активные текстовые поля/текстовые поля и на PUSH, а resignFirstResponder из них на PUSH.

Оба решения потребует внесения изменений в код всех контроллера, и я ищу что-то более общего типа:

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

Это могут быть общие решения.

Было бы очень полезно, если бы кто-то мог облегчить этот процесс мысли, или у кого-то есть немедленное решение для этого случая.

+0

Дублирование? http://stackoverflow.com/questions/1823317/get-the-current-first-responder-without-using-a-private-api – rdurand

ответ

6

Вы можете использовать метод ниже

[[[UIApplication sharedApplication] keyWindow] endEditing:YES] 
+1

это отлично сработало для меня ... спасибо ... – samfisher

4

Попробуйте это, для меня он работает отлично [yourView endEditing:YES]

+0

Я ищу еще один общий шаг, так как для этого я отслеживаю свой текущий чтобы вызвать это. – samfisher

+0

Этот метод на самом деле вызывает 'resignFirstResponder', если в представлении есть UITextField. https://developer.apple.com/reference/uikit/uiview/1619630-enditing –

0

Проблема это, когда вы хотите, чтобы вернуть фокус.

Я реализовал как прослушивание каждого текстового поля и кеширования, которое является последним. Вместо того, чтобы откладывать только один (после нажатия) после этого состояния восстановления, для этого требуется фокус.

0

Попробуйте это метод делегата ...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [self.view endEditing:YES]; // added this in for case when keyboard was already on screen 
    [self editStartDate:textField]; 
    return NO; 
} 
Смежные вопросы