UPDATE:
В iOS5 и выше возможно сделать это, потому что UITextField и UITextView соответствуют UITextInput протоколу. Пожалуйста, взгляните на это: « Могу ли я выбрать определенный блок текста в UITextField? » для примера:).
Надеюсь, это поможет
<ч />
СТАРЫЙ ОТВЕТ: (iOS4.x и ниже):
Нет способа сделать это с помощью общедоступных API (не то, что я знаю).
Однако я нашел несколько частных методов: (возможно недокументированные методы, потому что они не имеют префикса подчеркивания, который обычно имеют частные методы)
selectionRange
setSelectionRange:
Ниже код работает нормально (по крайней мере, в симуляторе 4.3), и я использую KVC, чтобы избежать раздражающих предупреждений. (self
является экземпляром подкласса UITextField
)
- (void) moveToRight{
NSRange selectedRange = [[self valueForKey:@"selectionRange"] rangeValue];
if (selectedRange.location != NSNotFound) {
if (selectedRange.length > 0) {
selectedRange.location = NSMaxRange(selectedRange);
selectedRange.length = 0;
}else if (selectedRange.location < self.text.length) {
selectedRange.location += 1;
}
[self setValue:[NSValue valueWithRange:selectedRange] forKey:@"selectionRange"];
}
}
- (void) moveToLeft{
NSRange selectedRange = [[self valueForKey:@"selectionRange"] rangeValue];
if (selectedRange.location != NSNotFound) {
if (selectedRange.length > 0) {
selectedRange.length = 0;
}else if (selectedRange.location > 0) {
selectedRange.location -= 1;
}
[self setValue:[NSValue valueWithRange:selectedRange] forKey:@"selectionRange"];
}
}
Поскольку это не публичные API, используйте их на свой страх и риск, и я не знаю, пройдут ли они проверку Apple.
КСТАТИ:
Я нашел их, используя:
#import "/usr/include/objc/objc-runtime.h"
unsigned int methodCount = 0;
Method *mlist = class_copyMethodList([UITextField class], &methodCount);
for (int i = 0; i < methodCount; ++i){
NSLog(@"%@", NSStringFromSelector(method_getName(mlist[i])));
}