Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
切换视图控制器时,iOS键盘闪烁_Ios - Fatal编程技术网

切换视图控制器时,iOS键盘闪烁

切换视图控制器时,iOS键盘闪烁,ios,Ios,我有一张登记表,我想让键盘一直在上面。 我现在的做法是,当用户在视图控制器之间移动时,在viewDidLoad中,第一个UITextField将成为第一个响应者。 问题在于,当用户在视图控制器之间移动时,键盘会闪烁(消失,然后再次出现) 另外,与此相关:我有一个带有几个uitextfields的表单。当用户按下next时,它使用becomefirstresponder进入下一个uitextfield。当用户位于最后一个文本字段时,键盘按钮变为“完成”。然后,当用户按下它时,如果最后一个字段有错误

我有一张登记表,我想让键盘一直在上面。 我现在的做法是,当用户在视图控制器之间移动时,在viewDidLoad中,第一个UITextField将成为第一个响应者。 问题在于,当用户在视图控制器之间移动时,键盘会闪烁(消失,然后再次出现)


另外,与此相关:我有一个带有几个uitextfields的表单。当用户按下next时,它使用becomefirstresponder进入下一个uitextfield。当用户位于最后一个文本字段时,键盘按钮变为“完成”。然后,当用户按下它时,如果最后一个字段有错误,它应该会得到焦点(调用becomeFirstResponder),但这不会发生(没有得到焦点,键盘会掉下来)。所有其他字段都能很好地获得焦点,只是最后一个字段不能。我已经尝试了一切:切换到其他文本字段并返回。问题是done自动删除键盘。

您应该为此提出两个单独的问题

首先,你的闪烁:

我猜你用的是UINavigationController。您可以在UINavigationController中的某个位置添加一个不可见的UITextField,在切换到新的ViewController之前对其进行聚焦。然后,当新的ViewController出现时(
ViewDidDisplay
),根据需要将焦点设置为第一个文本字段

然而,整个方法有点像黑客,我不建议你使用它。相反,请尝试在滚动视图中使用多个视图,当移动到新视图时,可以更改其中的偏移量。这也将解决闪烁问题

第二,在完成时失去第一响应者状态:

“完成”按钮专门用于准确指示它所说的内容;完成。按此键假定用户已完成,并且没有文本可供键入,从而取消键盘

如果您真的想保留“完成”按钮,请尝试以下操作:

  • 允许用户关闭键盘
  • 解雇后,检查最后一个字段中的错误
  • 如果出现错误,请不要调用
    [lastField becomeFirstResponder]
    ,而是尝试
    [self-performSelector:@selector(ThisSelector或WillCallFirstResponder),对象为:nil afterDelay:1.0]
  • 在方法
    中,此选择器将调用FirstResponder
    调用
    [lastField becomeFirstResponder]
  • 这将给键盘留出时间消失,然后再次弹出,因此它不会干扰
    becomeFirstResponder
    呼叫


    另一种方法是不使用Done按钮,而是使用return键。您可以随时使用委托方法
    textFieldShouldReturn:
    截取return。在这里,您可以处理任何错误检查,而不会导致文本字段失去焦点。

    第二个问题实际上应该是一个单独的问题。通过这种方式,人们可以回答任何一个问题,您可以将其标记为正确。谢谢!对于这两个问题我很抱歉。只有一个问题:看不见的文本字段解决方案并不完美(仍有一些闪烁)。我是做错了什么,还是只是有问题?恐怕滚动视图的解决方案对我来说是不可能的。不用担心。我们都加入过这个网站。但无法进一步帮助您解决闪烁问题。问题在于,对于本质上是一项任务的任务(填写整个表单),您使用了多个ViewController。苹果的想法是,一个viewController是为一个任务而存在的,当viewController不再是焦点时,该任务就会停止。因此,它还禁用当前正在进行的任何操作,例如键盘。恐怕没办法。要么全部是一个视图,要么在出现新的viewController时允许键盘消失并显示得很好。