成为没有动画的第一响应者

时间:2012-08-11 19:29:52

标签: objective-c ios uitextfield

有没有办法让UITextField成为没有键盘动画的第一响应者?也就是说,让键盘出现?

基本上,我在UIViewController的{​​{1}}上推了UIViewController,当第二个视图控制器弹出堆栈时,我想要{{1}立即拥有第一个响应者状态,以便在弹出第二个视图控制器时,用户从不会注意到文本字段不是第一个响应者。

现在我已经拥有它了,当它弹出时,键盘会动画显示屏幕,但我不希望看到它。

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

您可以使用像这样的UIView动画

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.0];
[UIView setAnimationDelay:0.0];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];

[textField becomeFirstResponder];  // <---- Only edit this line

[UIView commitAnimations];

这会导致键盘突然出现。

您可以使用-resignFirstResponder

执行相同操作

斯威夫特..

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.0)
    UIView.setAnimationDelay(0.0)
    someTextView.resignFirstResponder()
    UIView.commitAnimations()

答案 1 :(得分:1)

只需将其设置为-viewDidAppear中的第一个响应者,即可让用户永远不会注意到该字段已失去其状态。

-(void)viewWillAppear:(BOOL)animated {
    if ([self isViewLoaded] && self.textField)
        [self.textField becomeFirstResponder];
        [super viewWillAppear:animated];
}

如果您愿意,我会使用此代码在dropbox上添加一个简短的示例项目。

答案 2 :(得分:0)

我确定您使用的是哪个iOS版本,或者您在什么时候致电becomeFirstResponder[textFieldReference becomeFirstResponder]中为iOS5 / iOS6调用viewWillAppear:似乎按照您希望的方式工作:

在视图控制器显示它的视图之前调用它(如果你不手动处理视图控制器层次结构),一旦它出现在导航控制器中,键盘就会出现,文本字段有焦点。

也就是说,我听不到允许指定键盘外观风格的公开方式。

答案 3 :(得分:0)

我认为第一次提出问题时这不是一个选项,但 UIView.performWithoutAnimation 可以正常工作。

UIView.performWithoutAnimation {
    self.composeView.focusTextField()
}