为啥 -[UIKeyInput hasText] 总是为 UITextField 返回 NO?
Posted
技术标签:
【中文标题】为啥 -[UIKeyInput hasText] 总是为 UITextField 返回 NO?【英文标题】:Why does -[UIKeyInput hasText] always return NO for UITextField?为什么 -[UIKeyInput hasText] 总是为 UITextField 返回 NO? 【发布时间】:2011-12-11 17:02:20 【问题描述】:为什么 -[UIKeyInput hasText] 总是为 UITextField 返回 NO?这是 UIKit 的错误吗?
例如,以下测试失败:
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectZero];
textField.text = @"has text";
STAssertTrue([textField hasText], @"any text is text.");
【问题讨论】:
你能补充更多细节吗?你的代码可能吗? 做了一些测试,它接缝返回NO
,直到你给文本字段焦点,奇怪。
我猜UIKeyInput
协议在某种程度上与文本输入系统有关,而不是文本字段内容。例如,文本字段接缝不受对 insertText:
的调用的影响,除非它是第一响应者。如果您查看文档实际上是说“如果 backing store 有文本内容,则为 YES,否则为 NO。”。
【参考方案1】:
UITextField 通过 UITextInput 协议实现 UIKeyInput,其中声明:
UIKeyInput 协议——用于获取文本的能力 插入点的输入和删除。
(通过:http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITextInput_Protocol/Reference/Reference.html)
正如 Mattias 上面所建议的,它更多地与后备存储有关,主要用于通过系统键盘进行输入。
在您的示例中,您直接操作属性并绕过键盘输入。通过为字段提供第一响应者,将显示键盘,并且 hasText 将按预期返回 YES。
【讨论】:
以上是关于为啥 -[UIKeyInput hasText] 总是为 UITextField 返回 NO?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?