Xcode中。 UITextField自定义键盘:箭头按钮

时间:2013-02-05 08:34:46

标签: xcode cursor uitextfield move

需要你的帮助。 我制作了一个自定义键盘并将其添加到我的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”方法?

1 个答案:

答案 0 :(得分: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;