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