2010-06-30 2 views
5

Мне нужно настроить поведение UiTextField, чтобы я мог программно вставлять звездочки и перемещать курсор в начале строки; Я пытался трюк «вставить» (http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html), но курсор перемещается в конце эффект я пытаюсь достичь, как это:. В начале:Переместить программный курсор в UiTextField


затем символы пользователь вставки ф ***** Ф.О. **** Foo *** и т.д ...

возможно ли это или твики я делать не заслуживают усилия?

Thanx

-G-

ответ

7

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]))); 
} 
+0

Очень приятно. Спасибо, что поделились этим. – DenVog

Смежные вопросы