Как я могу дать фокус UITextView программно?


поэтому я хочу ввести модальный контроллер вида, в котором есть UITextView, и я хочу, чтобы клавиатура автоматически всплывала, а UITextView имел фокус.

Я нашел способ сделать это следующим образом:

textView.editable = YES;
textView.editable = NO;

Это просто кажется мне хаки, есть ли другой способ?

5 53

5 ответов:

С UITextView наследует от UIResponder (косвенно, он фактически наследует от UIScrollView, который наследует от UIView, который затем наследует от UIResponder) можно назвать -becomeFirstResponder метод на вашем текстовом поле, который заставит его стать первым ответчиком и начать редактирование:

[textView becomeFirstResponder];

Swift:

textView.becomeFirstResponder()

Это кажется немного программистские.

терминология Cocoa Touch для "наличия фокуса" - это "первый ответчик" и UITextViews приведет к отображению их клавиатуры, когда они являются первыми. Я могу придумать несколько методов, чтобы сделать UITextView первым ответчиком, но самый простой, вероятно, в методах viewWillAppear или viewDidAppear вашего контроллера вида:

- (void)viewWillAppear:(BOOL)animated
{

    [myTextView becomeFirstResponder];

    [super viewWillAppear:animated];
}
[textView becomeFirstResponder];

Если вы хотите, чтобы фокус был именно TextView при загрузке ViewController, вы можете разместить textView.becomeFirstResponder() в метод viewDidLoad, отключил функцию, как показано ниже:

 override func viewDidLoad() {
    super.viewDidLoad()

textView.becomeFirstResponder()

}

Я считаю, что это работает без каких-либо ошибок