切换视图控制器时,iOS键盘会闪烁
我有一个注册表单,我希望键盘始终位于顶部。 我现在这样做的方式是,当用户在视图控制器之间移动时,在viewDidLoad中,第一个UITextField成为第一个响应者。 问题在于,当用户在视图控制器之间移动时,键盘会闪烁(消失,然后再次出现)。
此外,与此有关:我有一个有几个uitextfields的表单。 当用户按下时,它将使用becomefirstresponder进入下一个uitextfield。 当用户在最后的文本字段中时,键盘按钮变成“完成”。 然后,当用户按下它时,如果最后一个字段出现错误,它应该得到焦点(调用成为FirstResponder),但不会发生(没有得到焦点和键盘下降)。 所有其他领域的焦点都很好,只是最后一个领域没有。 我已经尝试了一切:切换到其他文本字段并返回。 问题是完成后会自动删除键盘。
你应该为此提出两个单独的问题。
首先,你的闪烁:
我猜你正在使用UINavigationController。 您可以在切换到新的ViewController之前在UINavigationController中的某个位置添加一个不可见的UITextField,该对象将给予焦点。 然后,当新的ViewController出现时( viewDidAppear
),根据需要将焦点设置为第一个textField。
但是,整个方法都是hackey,我不建议你使用它。 相反,尝试在scrollView中使用多个视图,当您移动到新视图时,您可以更改其中的偏移量。 这也将解决闪烁问题。
其次,在完成时丢失firstResponder状态:
完成按钮专门用于指示它所说的内容; 完成。 按下这个假定用户已经完成,并且没有文本留下来键入,因此解除了键盘。
如果您确实想保留完成按钮,请尝试以下操作;
[lastField becomeFirstResponder]
,请尝试[self performSelector:@selector(thisSelectorWillCallFirstResponder) withObject:nil afterDelay:1.0]
。 thisSelectorWillCallFirstResponder
方法中调用[lastField becomeFirstResponder]
。 这会让键盘消失,然后再次弹出,所以它不会干扰becomeFirstResponder
调用。
另一种方法是不使用完成按钮,而是使用返回键。 您可以随时使用委托方法textFieldShouldReturn:
拦截返回textFieldShouldReturn:
。 在那里你可以处理任何错误检查,而不会导致textField失去焦点。