【问题标题】:Cocoa Touch - Keyboard CapturingCocoa Touch - 键盘捕捉
【发布时间】:2010-10-22 19:53:03
【问题描述】:

我如何知道用户在 textView 中按下了哪些键?

在你问之前,因为它听起来类似于键盘记录器,所以我正在制作一个打字应用程序,我需要知道他们输入的内容是否与提示的内容正确匹配。

谢谢!

【问题讨论】:

    标签: cocoa-touch


    【解决方案1】:

    您应该将 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

    【讨论】:

    • 我将它链接到我的文件所有者(视图控制器),这样好吗?
    • 是的,如果你已经创建了包含这个函数的视图控制器类,并将控制器的类设置为你自己在 IB 中的类,它应该可以工作。
    • 告诉我我这样做是否正确。我有 2 个类 app delagate 和 view controller。我将 textView 的 delagate 拖到文件所有者中。我将该方法复制粘贴到我的视图控制器中并像这样调用它。 [self textView:typingText shouldChangeTextInRange:5 :@"replace with this"]; 我假设参数是您想要影响的文本视图的名称、文本视图中的字符数量或您想要影响的范围以及当文本与参数不匹配时您想要放入的文本。
    • 不,你现在看错了:当按下一个键时,UITextView 将调用shouldChangeTextInRange。输入NSLog("shouldChangeText called!"); 以查看是否以及何时调用。 当且仅当文件的所有者是您的视图控制器时,您建立的连接才正常!(您可以在 IB 的“类型”列中查看列表视图时或在属性中看到检查器)更改文本视图中的文本是使用textView.text = @"hello world";
    • 我现在明白了!所以我试图调用一个在文本更改时调用的方法!编辑:我在该方法中添加了一个 nslog,但它没有打印任何内容,因此它没有被调用...
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2013-01-09
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多