2011-12-14 76 views
7

这似乎不可能,但也许别人有同样的问题。确认UITextview自动完成

是否可以通过编程方式接受自动填充,或以某种方式获取弹出的建议词汇?我的问题是我正在捕获返回/退格按键,然后将焦点移到另一个文本视图。当输入/退格命中时,文本视图将忽略自动建议的单词。看来只能通过命中空格/点接受自动完成(并返回新行)。有了这个代码:

- (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;  
     } 

有什么建议吗?

回答

-3

我有一个非常类似的问题,我正在制作一个应用程序,它必须读取文本视图中的每个字母,并且在Autocomplete插入单词时出现问题,因为它将它保存为一个字母。 您可以将每个字符添加到数组,然后检查是否有超过1个字符串的长度。或者你可以添加一个投入到阵列中的每个字符,然后运行像

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

单独添加每个字符,通过比较两个数组,你可以决定是否自动更正已被使用,什么字/秒。 希望这会有所帮助。

+0

这是一个真正可怕的方式来实现这一点。改变`UITextView` /`UITextField`的`firstResponder`属性,而不是让UIKit为你做自动完成工作。 – cbowns 2012-02-03 01:31:47

0

退格键和空间u可以使用这个条件

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

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

如果您希望在第一次查看辞职的第一响应者后保持键盘向上,请将firstResponder责任传递到您的下一个文本输入视图[anotherTextView becomeFirstResponder]