8

これは不可能に思えますが、他の誰かが同じ問題を抱えている可能性があります。

プログラムでオートコンプリートを受け入れることはできますか、またはポップアップする単語の候補を何らかの方法で取得することはできますか? 私の問題は、return/backspace キーストロークをキャプチャしてから、フォーカスを別のテキストビューに移動することです。Enter/Backspace キーを押すと、テキストビューは自動提案された単語を無視します。ヒットスペース/ドット(および新しい行に戻る)によるオートコンプリートを受け入れることしかできないようです。このコードで:

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

助言がありますか?

4

3 に答える 3

4

オートコンプリートの結果を受け入れる必要があるテキスト ビューまたはテキスト フィールドで-resignFirstResponder(つまり) を呼び出します。UIKit はプロパティを変更して、自動修正されたテキストを含めます。[textView resignFirstResponder].text

最初のビューが最初のレスポンダーを辞任した後もキーボードを上げたままにしたい場合は、firstResponder次のテキスト入力ビューに責任を渡します[anotherTextView becomeFirstResponder]

于 2012-02-01T23:02:28.473 に答える
0

バックスペースとスペースには、この条件を使用できます

if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0)
{    
 [delegate doSomethingWhenBackspace];    
 return NO;    
}
于 2011-12-27T12:15:20.220 に答える
-4

私は非常によく似た問題を抱えていました.テキストビューですべての文字を読む必要があるアプリを作成していましたが、オートコンプリートが単語を挿入したときに問題が発生しました。各文字を配列に追加してから、長さが 1 文字列を超えているかどうかを確認できます。または、配列に入れられた各文字を追加してから、次のようなものを実行することもできます

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

各文字を個別に追加するには、2 つの配列を比較して、オートコレクトが使用されているかどうか、およびどの単語で使用されているかを判断できます。これが役立つことを願っています。

于 2011-12-22T10:37:24.390 に答える