消失的UITextField文本

我遇到的问题是UITextField中的文本消失iOS上的每一个其他键盘。 这个问题发生在多个视图控制器中,但之前我已经能够通过使文本框更高来解决问题,给它更多的空间来绘制文本里面。

该解决scheme不适用于这种特殊情况。 我为我的应用程序使用自定义字体,所以我使用UITextField的子类来自动设置自定义字体的文本字段。 我已经尝试恢复到基本的UITextField,但这并不能解决问题。

我也试过注释掉我在问题视图控制器中实现的委托方法,这不能解决我的问题。 我真的不知道还有什么可以尝试的,所以我希望这里的其他人可以指出我的方向。 以下是我迄今发现的关于我的问题的事情:

  1. 文本消失并且每次点击都会重新出现,虽然点击退格button并不会改变文本的出现/消失(例如,当文本可见时点击退格,文本被正常删除,如果在文本被隐藏时点击,字符从文本字段的文本中删除,但用户无法看到发生了什么)
  2. 文本显示在文本框的底部,文本框是第一个响应者
  3. 当不同的文本字段成为第一响应者时,有问题的文本字段中的文本将被正确地绘制,垂直居中在文本字段中,并且始终可见。
  4. 当文本字段中包含文本时,先创build一个文本字段,这将导致文本重绘,并显示为在文本字段中向上/向下滚动。 文本将交替地在文本框中居中绘制,并从视图中向下“滚动”,或者被拖出视图并“滚动”到视图中,并停留在文本框的底部。
  5. 视图控制器只有在呈现的两种模式中的一种模式下出现问题。它或者以模态方式作为UINavigationController的根视图控制器呈现,或者作为导航控制器的第三视图控制器被推入模态呈现的UINavigationController堆栈中。 在第一种情况下,它是根视图控制器,文本字段工作得非常好,没有出现上述的奇怪行为。 在第二种情况下,奇怪的行为始终如一。

这个问题的一个很好的例子可以在这个类似的问题发布的video中看到: UITextField文本每隔一个按键就会消失 。 问题本身的答案是没有用的,并不能解决我的问题。

编辑

我已经成功地重现了我之前遇到的问题。 事实certificate,问题是由导航控制器的视图添加一个子视图,然后删除它,而UITextField焦点。 如果在未编辑UITextField时删除子视图,则不会发生该错误。

在我的情况下,在networking调用期间,导航控制器中将加载图像作为子视图添加到导航控制器中,并在完成所述调用之后将其移除。 在这段时间里,UITextField会被激活,这会导致上面描述的视觉错误。

我已经在这里上传的独立示例项目中重新创build了这个bug: https : //www.dropbox.com/s/s4kc05vg1pwteeo/Funky%20TextField%20Tester.zip 。 另外请注意,如果您告诉textField成为视图控制器的viewDidLoad实现中的第一响应者,则此错误将在开始时立即生效并保留。

新问题

对于我来说,避免将加载视图放在导航控制器的视图中是很容易的,但是这样做给了我一个很好的效果,即加载视图在屏幕上的相同位置“浮动”,而将其放入视图控制器的视图在导航堆栈上引发了一堆视觉问题(当视图控制器被压入堆栈时,移动加载视图位置,加载视图被其他视图控制器遮挡等)。

有没有什么方法可以在不将视图放到导航控制器的视图中的情况下重现这种外观,或者可以将其放置在导航控制器的视图中,而不需要执行奇怪的解决方法,如在子视图呈现期间停止编辑所有UITextFields ?

我有同样的问题在这里,没有在以前的版本。 多亏了我testing过的项目,我发现这个问题来自于在导航控制器中embedded一个半透明导航栏的视图控制器。

我在我正在展示的导航控制器的模拟指标中设置了不透明的条形,而UITextField没有更多的问题。

至less在我的情况下,一切都已经解决了,我设置了模糊指标顶部酒吧的不透明酒吧在InterfaceBuilder为我的UINavigationControllerembedded一个UIViewController我想模拟地呈现

希望这对你也一样。

我有一个类似的问题,UITextField显示的文本很好,但是当我从背景回来时,它不显示文本和文本字段似乎没有回应。 但是,我注意到它实际上是接受投入。 它只是不可见。 在xcode的首发模式中显示视图显示,textfield已经下移,并在其他视图下分层并且不可见。 在我的情况下,我禁用AutomaticallyAdjustScrollViewInsets为NO,问题已经解决!

我有两个search栏和我的应用程序中的几个UITextFields完全相同的问题。 似乎来去莫名其妙,发生在模拟器和多个真实设备上的多种设备types。 重新启动实际的手机似乎使问题消失在一个已经安装在手机上的应用程序。 我猜这是一个苹果的错误…但我真的没有线索,这里的解决scheme似乎没有解决这个问题。

当您在搜索栏内的文本字段中输入内容时,就是这样的样子。

UPDATE

好吧,我可能已经解决了它…我有一个login控制器,显示在这个文本字段之前,我发现,如果我打开该login控制器上的键盘(就像我不只是预先填写用户名和密码),则会发生这种情况。 但是,如果我不打开键盘,那就完全没问题。

更新2 – 已解决!

所以,事实certificate,当login控制器中的用户或密码文本字段被选中时,其中一个成为第一响应者。 当用户点击login,视图消失时,这些字段永远不会成为第一个响应者,所以它把键盘置于其他应用程序的状态。

在我的login方法中将文本字段作为第一响应者辞职解决了问题:

 if (_emailTextField.isFirstResponder) { [_emailTextField resignFirstResponder]; } if (_passwordTextField.isFirstResponder) { [_passwordTextField resignFirstResponder]; } ...do login stuff 

我有同样的问题。 我在viewDidLoad里面使用了becomeFirstResponder方法。 但后来我觉得成为FirstResponder应该在ViewDidAppear里面,因为didLoad方法当时渲染整个视图没有用户交互。 实际的用户交互在viewDidAppear之后开始,所以我把viewFieldAppear方法中的becomeFirstResponder移动了,现在一切正常。

以前

 -(void)viewDidLoad{ [self viewDidLoad]; [self.textField becomeFirstResponder]; ...... } 

 -(void)viewDidAppear:(BOOL)animated{ [self.loginTextField becomeFirstResponder]; ...... } 

这似乎是来自苹果的一个相当普遍的错误,人们用许多不同的方式解决了这个错误。 我遇到了同样的问题。 经过一番试验后,我发现我的情况是因为我在某些textField“didBeginEditing”时隐藏了导航栏。 一旦发生这个错误,它会发生在应用程序周围,不仅在该控制器。 我通过不隐藏导航栏(这不是我真正想要的,但别无select)消除了这个bug。

希望这会帮助别人。 简而言之,这个错误可能由于各种原因而发生。 尝试撤消一些更改,直到错误消失,然后你知道它究竟是从哪里来的。

我在UIView上添加了一些UITextFields类似的问题,发现它是我自己创build的一个bug,而不是苹果。 我在textFieldDidBeginEditing委托设置textfield.setContentScaleFactor

[textField setContentScaleFactor:10.0];

删除上面的行,它没有做任何其他的东西工作。

我的视图层次—> UIScrollview – > UIImageView – > UIView – > UITextField

希望它能帮助任何人。

我有一个类似的问题。 通过退出前一个屏幕的键盘来解决这个问题。

前一个屏幕有一个文本框,其中键盘types为Numpad 。 所以在来到文本resignFirstResponder闪烁的屏幕之前,我叫了resignFirstResponder

Ziewvater的原始问题编辑解决了我的问题。 我有几个文本域被加载在运行时,每当我回到导航,这些意见被处置/删除,然后它实例化每个新的文本域。 重新加载一次后,这将是明文,但编辑完成后,textfield.text属性将被设置,你可以看到文本。

var responder = View.FindFirstResponder(); //(i'm in Xamarin) if(responder != null) responder.ResignFirstResponder();

这样做在视图中将消失解决我的问题。 谢谢!!!!!!!