MISE À JOUR:
Dans iOS5 et plus il est possible de le faire, car conformes à UITextInput protocole UITextField et UITextView. S'il vous plaît jeter un oeil à ceci: "Can I select a specific block of text in a UITextField?" pour un exemple :).
Hope it helps
RÉPONSE VIEUX: (iOS4.x et ci-dessous):
Il n'y a aucun moyen d'y arriver en utilisant les API publiques (Pas que je sache). Cependant, j'ai trouvé deux méthodes privées: (méthodes peut-être sans papiers parce qu'ils n'ont pas le préfixe underscore que les méthodes privées ont généralement)
selectionRange
setSelectionRange:
Ci-dessous fin de travail de code (au moins dans le simulateur 4.3) et J'utilise KVC pour éviter les avertissements gênants. (self
est une instance d'une sous-classe de 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"];
}
}
Puisque ce ne sont pas des API publiques, utilisez à vos propres risques, je ne sais pas s'ils vont passer l'examen d'Apple.
BTW: Je les ai trouvés en utilisant:
#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])));
}
Très agréable. Merci d'avoir partagé cela. – DenVog