iOS - UITextView становиться первым ответчиком - PullRequest
1 голос
/ 25 ноября 2011

Это проблема: когда MessageComposeViewController был закрыт, мой textView не становится первым респондентом и клавиатура не появляется.Зачем?Я положил код [textView becomeFirstResponder] в viewWillAppear.Как я могу сделать ??

Ответы [ 6 ]

5 голосов
/ 02 августа 2012

Позже я вызвал сталFirstResponder по этой строке:

[self.searchBar performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1f];

Это сработало для меня. Надеюсь, что это поможет.

Полагаю, это причина анимации.

1 голос
/ 21 декабря 2015

В соответствии с примечанием из официальной документации Apple :

Убедитесь, что ваше приложение установило свой граф объектов перед тем, как назначить объект первым респондентом.Например, вы обычно вызываете метод становленияFirstResponder в переопределении метода viewDidAppear :.Если вы попытаетесь назначить первого респондента в viewWillAppear :, ваш граф объектов еще не установлен, поэтому метод становленияFirstResponder возвращает NO.

, вам следует вызвать [textView becomeFirstResponder] в viewDidAppear: вместо viewWillAppear:.

Похоже, что решение, которое вы нашли с помощью [self dismissModalViewControllerAnimated:NO], использует то же правило из заметки.

0 голосов
/ 20 июля 2016

В быстром

let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
    dispatch_after(when, dispatch_get_main_queue()) {
        self.searchBar.becomeFirstResponder()
    }
0 голосов
/ 09 ноября 2012

У меня более или менее та же проблема, она была связана с анимацией в segue, похоже, что я делаю sege o отклонение представления без использования resignFirstResponder, разрываю отношение с представлением, я просто изменяю segue, чтобы сделать это программно, как это:

  - (IBAction)back:(id)sender {

     [textView resignFirstResponder];
     [self performSegueWithIdentifier:@"returnScreen" sender:self];
  }

А потом в представлении WillAppear я сделал следующее:

 -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     [textView becomeFirstResponder];

  ....

  }
0 голосов
/ 25 ноября 2011

Я нашел решение !!!!!!!! Итак, в методе делегата messageComposeViewController:didFinishWithResult мы вызываем [self dismissModalViewControllerAnimated:YES], но это неправильно! Этот метод должен получить НЕТ, а не ДА! А потом вспомните метод [textView becomeFirstResponder]! Я не знаю почему, но таким образом приложение работает отлично! Спасибо всем, однако! :)

0 голосов
/ 25 ноября 2011

Ваш вопрос не совсем понятен, но вы предположили, что viewWillAppear вызывается, когда контроллер модального представления (то, что я предполагаю, что вы назвали MessageComposeViewController ) отклоняется. Это может не иметь место при всех обстоятельствах (например, если ваш взгляд находится внутри UINavigationController)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...