Ios UITextField文本在编辑之前不可见

Ios UITextField文本在编辑之前不可见,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我已经实现了UITextField的一个子类,其填充如下: 通过上述组合,将文本字段设置为视图中的第一响应者,并在字段中设置初始起始值,我遇到了一个问题,在编辑字段之前文本是不可见的,之后就可以了: 发生这种情况时,我还会在控制台中看到以下消息: -[display]:忽略伪层大小(1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404

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

通过上述组合,将
文本字段设置为
视图中的
第一响应者
,并在字段中设置初始起始值,我遇到了一个问题,在编辑字段之前文本是不可见的,之后就可以了:

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

-[display]:忽略伪层大小(179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000, 20.000000),contentsCale 3.000000,备份存储大小(inf,60.000000)

我认为可能是
bounds
值出了问题,这就是导致视觉缺陷和错误的原因,但是当我记录边界时,我得到了一系列看起来有效的值,例如:
{{0,0},{345,40}

对上述两种方法进行注释,基本上是一个普通的UITextField,似乎可以解决这个问题。我已经尝试在每种方法中添加对
super
的调用,以防这些方法有所帮助,但都没有用。有什么想法吗


更新-将调用移动到
becomeFirstResponder
ViewDidAspect
似乎也解决了问题,但这几乎扼杀了基本上是一个向导的流程,因此上一个屏幕上也有键盘,因此我希望避免键盘在每个屏幕上消失并重新出现

多亏了@matt,我发现这个问题是因为我在
视图的文本字段上调用
becomeFirstResponder
,将出现
。虽然这在正常的文本字段和文本视图中已经运行了多年,没有问题,但似乎这最终是一个出现问题的实例

根据报告:

您可以调用此方法使响应程序对象(如视图)成为 第一响应者。但是,只有当它 是视图层次结构的一部分。如果视图的window属性包含 UIWindow对象,它已安装在视图层次结构中;如果 返回nil,视图将从任何层次结构分离


这是通过在调试器中打印[[self.textfield superview]窗口]来验证的,在
视图中将出现
中,窗口为
nil
,而在
视图中则不出现该窗口。每天学习新内容。

“将文本字段设置为视图中的第一响应者将出现:”这有什么意义呢?在
视图中,文本字段还没有出现在视图层次结构中。这就是“will”的意思;出现在将来。它怎么可能是第一反应器呢?“所以我希望避免键盘在每个屏幕上消失并重新出现”明白,但你对此无能为力。看看任何苹果应用程序。当你改变屏幕时,键盘都会被关闭。你无法神奇地在这里获得流畅的流程。我也觉得这很有趣,但是——如果你愿意,可以叫我娘娘腔——我更喜欢按照文档告诉我的去做。Cocoa是一个巨大的无形框架;我不喜欢冒险玩它不支持的边缘案例,尤其是当文档告诉我它不支持某些东西时。可能幸运的是,在
视图中调用
becomeFirstResponder
会对您有效,但文档告诉您,您所做的总是错误的,而现在,当您遇到这种情况时回到咬你的时候,你几乎不能喊犯规。我还在考虑其他选择。假设所有这些都发生在这样一个环境中,当我们从一个屏幕移动到另一个屏幕时,某些东西会持续存在——这些东西可能是第一反应者,会召唤键盘。然后在我们移动之前,我们将f.r.状态转移到它,移动之后,我们将f.r.状态转移到它我们转到下一个文本字段。因此,键盘在更改过程中保持不变。例如,假设这是一个正常的导航界面。然后我们有一个导航栏。然后我们可以在导航栏中有一个文本字段。然后该文本字段可以成为第一响应者。我们可以使用它在按下时“保持”键盘打开吗?如果文本字段很小(也许通常是看不见的)用户永远不会知道。我从未尝试过这个,但值得一试。
- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectInset(bounds, 10, 10);
}

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