UITextField文本不可见直到编辑

时间:2015-10-14 14:18:08

标签: ios objective-c uitextfield

我已经实现了UITextField的子类,其填充如下:

methods taken from here

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

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

结合上述内容,将textField设置为firstResponder中的viewWillAppear:,并在字段中设置初始值,我遇到了问题在编辑字段之前文本是不可见的,然后在此之后就可以了:

enter image description here

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

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

我认为bounds值可能不正确,这就是导致视觉错误和错误的原因,但是当我记录边界时,我得到了一堆似乎有效的值,例如as:{{0, 0}, {345, 40}}

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

更新 - 将呼叫转移到becomeFirstResponderviewDidAppear似乎也解决了这个问题,但这几乎会导致问题无法解决基本上是一个向导,因此前面的屏幕也有屏幕上的键盘,所以我想避免键盘在每个屏幕上消失并重新出现。

1 个答案:

答案 0 :(得分:1)

感谢@matt,我发现问题的原因是我在becomeFirstResponder的文本字段中调用了viewWillAppear。虽然这对我来说对于普通的文本域和文本视图多年来都没有问题,但看起来这最终是一个出现问题的实例。

根据UIResponder docs for becomeFirstResponder

  

您可以调用此方法来制作响应者对象,例如查看   急救人员。但是,您应该只在该视图上调用它   是视图层次结构的一部分。如果视图的窗口属性包含   UIWindow对象,它已安装在视图层次结构中;如果它   返回nil,视图与任何层次结构分离。

这是通过在调试器中打印[[self.textfield superview]窗口]来验证的,而viewWillAppear窗口是nil,而它不在viewDidAppear中。每天学习新东西。