0

少し助けが必要です。カスタムキーボードを作成し、UITextFields.inputViewに追加しました。すべてがうまくいきます。しかし、フィールド内のカーソルを左右に移動するためのボタンを作成する際に、いくつかの問題が発生しました。実際、私はそれらを作り、それらは機能します。ただし、TextField自体はカーソル位置の変更を正しく表示しません。テキストがフィールドの範囲外になり、カーソルをフィールドの範囲外に移動した場合、フィールド自体は更新されません。つまり、カーソルは必要なとおりに移動しますが、フィールドの表示領域から外れます。問題は、UITextFieldを更新する方法です。

カーソルを左に移動するボタンのコードを投稿する:(長さ0のx位置のテキストを選択するように機能します)

//オブジェクト-は私のUITextFieldです//pos-カーソルの位置

-(IBAction)moveLeft:(UIButton*)sender{
UITextRange *selectedRange = [object selectedTextRange];
int pos = [object offsetFromPosition:object.endOfDocument toPosition:selectedRange.start];
if ([object.text length]+pos>0){
        NSRange range= NSMakeRange([object.text length]+pos-1, 0);

        UITextPosition *start = [object positionFromPosition:[object beginningOfDocument]
                                                      offset:range.location];
        UITextPosition *end = [object positionFromPosition:start
                                                    offset:range.length];
        [object setSelectedTextRange:[object textRangeFromPosition:start toPosition:end]];
        **[self updateTextField];**
    }    
}

この「updateTextField」メソッドを作成する方法は?

4

1 に答える 1

0

私は最近、PKCustomKeyboardを使用しているときにこれを実際に行いました。

- (IBAction)leftArrowPressed:(id)sender
{
    [[UIDevice currentDevice] playInputClick];
    UITextRange *selectedRange = [(UITextField *)self.textView selectedTextRange];
    UITextPosition *startPosition = [(UITextField *)self.textView positionFromPosition :[(UITextField *)self.textView beginningOfDocument] offset : 0];

    if (![(UITextField *)self.textView offsetFromPosition : selectedRange.start toPosition : startPosition] == 0)
    {
        // Calculate the new position, - for left and + for right
        UITextPosition *newPosition = [(UITextField *)self.textView positionFromPosition : selectedRange.start offset : -1];

        // Construct a new range using the object that adopts the UITextInput, our textfield
        UITextRange *newRange = [(UITextField *)self.textView textRangeFromPosition : newPosition toPosition : newPosition];

        // Set new range
        [(UITextField *)self.textView setSelectedTextRange : newRange];
    }
}

UIInputViewのTextViewへの参照が必要です。(PKCustomKeyboardはこれを行います)

@property (strong) id<UITextInput> textView;
于 2013-02-21T21:58:02.637 に答える