最近做了一个自定义的键盘,输入框是一个textField,让人头疼的问题是,点击删除按钮,通过方法,要不就从第一个字符删,要不就是最后一个,反正就是不能在指定的位置删除,经过一番努力在网上终于找到方法了 [textField deleteBackward] ,这一句代码就OK了。问题又来了,在当前位置删除了,不能在此处接着添加插入。要实现在指定位置插入,就必须获取光标的位置。那么下面便是,获取光标位置的方法。
UITextField和setSelectedRange和selectedRange一个类别(就像在UITextView的类)下面的例子是在B2Cloud找到这里,代码如下:
@interface UITextField (Selection)
- (NSRange) selectedRange;
- (void) setSelectedRange:(NSRange) range;
@end
@implementation UITextField (Selection)
- (NSRange) selectedRange
{
UITextPosition* beginning = self.beginningOfDocument;
UITextRange* selectedRange = self.selectedTextRange;
UITextPosition* selectionStart = selectedRange.start;
UITextPosition* selectionEnd = selectedRange.end;
const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];
const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];
return NSMakeRange(location, length);
}
- (void) setSelectedRange:(NSRange) range
{
UITextPosition* beginning = self.beginningOfDocument;
UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];
UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];
UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition];
[self setSelectedTextRange:selectionRange];
}
@end
// 代码源来自 http://codego.net/432239/