12

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

基本上,我在具有 的 上推一秒钟UIViewControllerUIViewControllerUITextField第二个视图控制器从堆栈中弹出时,我希望UITextField立即具有第一响应者状态,以便当第二个视图控制器被弹出时,用户永远不会注意到文本字段不是第一响应者。

现在我有它,所以当它弹出时,键盘会在屏幕上显示动画,但我不希望看到它。

有任何想法吗?

4

4 回答 4

17

您可以像这样使用 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()
于 2012-08-11T20:00:45.443 回答
1

只需将其设置为第一响应者,-viewDidAppear以使用户永远不会注意到该字段已丢失其状态。

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

如果您愿意,我已经使用此代码在Dropbox上放置了一个简短的示例项目。

于 2012-08-11T20:03:52.123 回答
0

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

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

也就是说,我听说没有公开的方式可以指定键盘外观样式。

于 2012-08-11T20:06:52.477 回答
0

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

UIView.performWithoutAnimation {
    self.composeView.focusTextField()
}
于 2021-05-28T18:45:55.893 回答