【问题标题】:Confirm UITextview auto-complete确认 UITextview 自动完成
【发布时间】:2012-01-20 02:23:29
【问题描述】:

这似乎不可能,但也许其他人也遇到过同样的问题。

我是否可以通过编程方式接受自动完成,或者以某种方式获得弹出的建议单词?我的问题是我正在捕获返回/退格键击,然后将焦点移动到另一个文本视图。当输入/退格键时,文本视图将忽略自动建议的单词。似乎只能通过点击空格/点来接受自动完成(并返回新行)。使用此代码:

 - (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
                                replacementText:(NSString *)text {
    NSRange textViewRange = [textView selectedRange];

    // Handle newrow and backspace.  
    if(([text length] == 0) && (textViewRange.location== 0) && textViewRange.length==0){
        // BACKSPACE KEYSTROKE
        [delegate doSomethingWhenBackspace];
        return NO;      
    }else if ([text isEqualToString:@"\n"]){    
        // RETURN KEYSTROKE
        [delegate doSomethingWhenReturn];       
        return NO;      
    }

    return YES;
}

我尝试在按下返回键时以编程方式添加“空格”,但这也忽略了自动完成的单词。

else if ([text isEqualToString:@"\n"]){ 
                // Tryin to accept autocomplete with no result. 
                textview.text = [textview.text stringByAppendingString:@" "];
            // RETURN KEYSTROKE
            [delegate doSomethingWhenReturn];       
            return NO;      
        }

有什么建议吗?

【问题讨论】:

    标签: iphone ios uitextview uitextviewdelegate


    【解决方案1】:

    在需要接受自动完成结果的文本视图或文本字段上调用-resignFirstResponder(即[textView resignFirstResponder]):UIKit 将更改.text 属性以包含自动更正的文本。

    如果您想在您的第一个视图退出第一响应者后保持键盘打开,请将 firstResponder 责任传递给您的下一个文本输入视图,并使用 [anotherTextView becomeFirstResponder]

    【讨论】:

      【解决方案2】:

      退格和空格你可以使用这个条件

      if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0)
      {    
       [delegate doSomethingWhenBackspace];    
       return NO;    
      }
      

      【讨论】:

        【解决方案3】:

        我遇到了一个非常相似的问题,我正在制作一个必须阅读文本视图中的每个字母的应用程序,当自动完成插入单词时我遇到了问题,因为它将它保存为一个字母。 您可以将每个字符添加到一个数组中,然后检查是否有超过 1 个字符串的长度。或者您可以将放入数组中的每个字符添加,然后运行类似

        NSString *string = text;
        NSMutableArray *array = [NSMutableArray new];
        for (int i=0; i<string.length; i++) {
         [array addObject:[string substringWithRange:NSMakeRange(i, 1)]];
        }
        

        单独添加每个字符,通过比较两个数组,您可以确定是否使用了自动更正以及使用了什么单词/s。 希望这会有所帮助。

        【讨论】:

        • 这是一种非常糟糕的方法来实现这一点。更改 UITextView/UITextFieldfirstResponder 属性,让 UIKit 为您完成自动完成工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多