0

有点需要你的帮助。我制作了一个自定义键盘并将其添加到我的 UITextFields.inputView 中。一切正常。但是我在制作用于在字段中左右移动光标的按钮时遇到了一些问题。实际上,我制作了它们并且它们起作用了。但是,TextField 本身并不能正确显示光标位置的变化。如果文本超出字段范围,并且我将光标移出字段范围,则字段本身不会刷新。我的意思是光标完全按照它必须的方式移动,但它超出了字段的可见区域。那么问题来了,如何让 UITextField 刷新呢?

发布我的按钮代码,它将光标向左移动:(就像在 x 位置选择长度为 0 的文本一样)

// object - 是我的 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 回答