非常简单的问题:
我有一个包含两个文本字段的视图。当视图加载时,我希望键盘自动弹出并聚焦第一个字段。
我该怎么做? (在代码中?在IB中?)
非常感谢! 芥末
答案 0 :(得分:62)
在viewDidAppear:
方法调用中[yourTextField becomeFirstResponder]
。
答案 1 :(得分:7)
[myTextField becomeFirstResponder]
应该可以解决问题。
还要确保实施UITextFieldDelegate
方法,以便隐藏第一响应者。
答案 2 :(得分:2)
作为对MarkGranoff答案的澄清;
如果您将[yourTextField becomeFirstResponder]
放在viewDidLoad
或viewWillAppear
内 - 它会显示键盘而不会等待一两秒钟(如果您拨打becomeFirstResponder
电话会出现这种情况在viewDidAppear方法内部。)
答案 3 :(得分:2)
嗯,我知道这个问题已经多次回答了。调用viewDidAppear
方法后显示键盘需要一些时间。
viewDidAppear
是在视图生命周期中被调用的最后一个方法当然消失的原因。此外,如果在内存中找不到键盘,也需要创建键盘。所以,第一次像我预期的那样需要更多的时间。这些原因引起了一些麻烦,这让我烦恼。
我总是在becomeFirstResponder
方法中调用viewWillAppear
方法来减少键盘的显示时间,但我需要在viewDidAppear
方法之后显示键盘,以免失去平滑的动画。
所以,我想出的这个小技巧就像魅力一样。我在模拟器和设备上测试了它。如果它在您的情况下无法正常工作,则您没有其他选择,但可以按照已接受的答案中的说明进行操作。
嗯,我正在做的是创建一个UITextField
(你可以使用任何与键盘交互的视图)并调用并转发第一个响应者方法将我的键盘放入内存中,如果不是创造了。所以,第二次,你将获得缓存键盘,加快键盘显示时间。好吧,我把这些代码放在我之前要显示键盘的前一个视图控制器上。
以下是代码:
- (void)viewDidAppear:(BOOL)animated
{
UITextField *textField = [[UITextField alloc]init];
[self.view addSubview:textField];
[textField becomeFirstResponder];
[textField resignFirstResponder];
[textField removeFromSuperview];
}