2011-12-14 151 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]