【发布时间】:2010-10-22 19:53:03
【问题描述】:
我如何知道用户在 textView 中按下了哪些键?
在你问之前,因为它听起来类似于键盘记录器,所以我正在制作一个打字应用程序,我需要知道他们输入的内容是否与提示的内容正确匹配。
谢谢!
【问题讨论】:
标签: cocoa-touch
我如何知道用户在 textView 中按下了哪些键?
在你问之前,因为它听起来类似于键盘记录器,所以我正在制作一个打字应用程序,我需要知道他们输入的内容是否与提示的内容正确匹配。
谢谢!
【问题讨论】:
标签: cocoa-touch
您应该将 UITextView 的 delegate 设置为您的类之一。 (在 IB 中或以编程方式,无所谓)
在您的委托中,您可以放置以下函数或类似的东西:
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
if ( [text length] == 0 ) return YES; // always allow deletion of characters
NSString *new = [textView.text stringByReplacingCharactersInRange:range
withString:text];
if ( [new length] > 100 ) // PUT IN YOUR MAGIC CONDITION HERE
{
return NO; // don't allow the edit to happen
}
return YES; // by default, allow the edit to happen
}
这只会将输入限制为 100 个字符,但您可以根据需要将其复杂化。
edit ps,你问的是“用户按下了什么键”,但由于我们也有复制粘贴和自动更正功能,这可能会给出一个长度超过 1 个字符的text!
【讨论】:
[self textView:typingText shouldChangeTextInRange:5 :@"replace with this"]; 我假设参数是您想要影响的文本视图的名称、文本视图中的字符数量或您想要影响的范围以及当文本与参数不匹配时您想要放入的文本。
shouldChangeTextInRange。输入NSLog("shouldChangeText called!"); 以查看是否以及何时调用。 当且仅当文件的所有者是您的视图控制器时,您建立的连接才正常!(您可以在 IB 的“类型”列中查看列表视图时或在属性中看到检查器)更改文本视图中的文本是使用textView.text = @"hello world";