1. 程式人生 > >自定義鍵盤中的刪除鍵TextField上游標位置的獲取以及設定游標的位子

自定義鍵盤中的刪除鍵TextField上游標位置的獲取以及設定游標的位子

最近做了一個自定義的鍵盤,輸入框是一個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/