UPDATE:
В iOS5 и выше, можно сделать это, потому что UITextField и UITextView соответствуют UITextInput протоколу. Пожалуйста, взгляните на это: «Can I select a specific block of text in a UITextField?» для примера :).
Надеется, что это помогает
OLD ОТВЕТУ: (iOS4.x и ниже):
Там нет никакого способа сделать это, используя публичные интерфейсы (Не то, что я знаю). Однако я нашел несколько частных методов: (возможно, недокументированные методы, потому что они не имеют префикс подчеркивания, что частные методы, как правило, есть)
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])));
}
Очень приятно. Спасибо, что поделились этим. – DenVog