直到编辑UITextField文本不可见

我已经实现了具有填充的UITextField的子类,如下所示:

从这里采取的方法

- (CGRect)textRectForBounds:(CGRect)bounds { return CGRectInset(bounds, 10, 10); } - (CGRect)editingRectForBounds:(CGRect)bounds { return CGRectInset(bounds, 10, 10); } 

通过以上的组合,将textField设置为viewWillAppear:firstResponder ,并且在该字段中有一个初始的起始值,我遇到了一个问题,即在编辑该字段之前文本是不可见的,那:

在这里输入图像说明

发生这种情况时,我还在控制台中看到以下消息:

-[<CALayer: 0x15f000da0> display]: Ignoring bogus layer size (179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000, 20.000000), contentsScale 3.000000, backing store size (inf, 60.000000)

我想也许bounds价值是失控,这是什么导致了视觉错误和错误,但是当我logging的边界,我得到了一堆似乎是有效的值,如: {{0, 0}, {345, 40}}

注释掉上面这两个方法,基本上是一个普通的UITextField,似乎解决了这个问题。 我已经尝试在每个方法中添加super调用,以防万一,以帮助,无济于事。 有任何想法吗?

更新 – 将调用becomeFirstResponder移动到viewDidAppear似乎也解决了这个问题,但这几乎杀死了基本上是向导的stream程,因此前一个屏幕也在屏幕上有键盘,所以我想避免键盘解散和重新出现在每个屏幕上。

感谢@matt,我发现这个问题是由于我在viewWillAppear的textfield中调用了becomeFirstResponder而引起的。 虽然这对我来说正常的textfields和文字浏览多年来没有问题,看来这是最后一个问题出现的例子。

根据UIResponder becomeFirstResponder

你可以调用这个方法来创build一个响应者对象,比如查看第一个响应者。 但是,如果它是视图层次结构的一部分,则只能在该视图上调用它。 如果视图的窗口属性包含一个UIWindow对象,则它已经安装在视图层次结构中; 如果返回nil,则视图将从任何层次结构中分离出来。

这是通过在debugging器中打印[[self.textfield superview]窗口]来validation的,并且在viewWillAppear窗口中是nil ,而它不在viewDidAppear 。 每天学些新东西。