2012-03-19 13 views
15

Metin alanının UITextRange nesnesi aracılığıyla UITextField'ın geçerli düzeltme işaretine ulaşmamın bir yolu var mı? UITextRange, UITextField tarafından herhangi bir kullanımda bile mi geri döndü? UITextPosition için genel arayüzde görünür bir üye yok.UITextField içinde UITextPosition

cevap

20

Dün gece aynı sorunla karşılaşıyordum. Bu, pozisyonu belirlemek için seçilen aralığın "başlangıç" sı rölatif konumunu elde etmek için UITextField üzerinde offsetFromPosition kullanmanız gerektiği ortaya çıkıyor.

örn. o metin alanını değiştirdikten sonra kullanıcının konumunu geri kolaydı olarak

// Get the selected text range 
UITextRange *selectedRange = [self selectedTextRange]; 

//Calculate the existing position, relative to the beginning of the field 
int pos = [self offsetFromPosition:self.beginningOfDocument 
         toPosition:selectedRange.start]; 

Ben endOfDocument kullanarak sona erdi. Ben burada bir blog ilanı yazdı:

http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a-uitextfield/

+1

Bağlantı noktanız şüpheli bir kötü amaçlı yazılım sitesine. Lütfen kontrol edin –

12

Ben UITextField bir kategori kullanılmış ve setSelectedRange ve selectedRange (sadece UITextView sınıfında uygulanan yöntemlerin gibi) uygulamaya koydu. B2Cloud here'da, aşağıdaki kodları ile bir örnek bulunur:

@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 
+0

Teşekkür ederiz. Kodunuz "UITextView" ile "UITextPosition" ı nasıl kullanabileceğimi anlamamda bana yardımcı oldu. – derpoliuk