2010-04-14 20 views
5

UITextView'teki Text'i, dokunduğumuzda gördüğümüz varsayılan "Seç" ve "Tümünü Seç" pop seçeneklerine benzer şekilde seçmek istiyorum. Kullanıcıya bunu özel menümden yapabilmeyi istiyorum. SelectedRange ile oynadım ama bu hile yapmak gibi görünmüyor. Herhangi bir fikir?UITextView'de Programsal Olarak Metni Seçebilir miyim?

Teşekkür

+0

" selectedRange "işlevini kullanmaya çalıştığınız kodu yükleyebilir misiniz? Bu doğru yaklaşım gibi geliyor; Geçersiz bir aralık ya da bir şey veriyor olmanız mümkün. –

+0

Aynı sorunu yaşıyorum. Seçmek istediğim metin için doğru aralığı alabiliyorum (UITextView doğru konuma ilerler) fakat metinde "vurgulama" veya ekleme noktası yoktur. UITextView'a "aktive etmek" ya da bir şey için bir mesaj göndermem gerekip gerekmediğini merak ediyorum. – jasongullickson

cevap

5

documentation belirtildiği gibi selectedRange özellik yalnızca iPhone OS 3.0 ve daha sonra, bunu ancak gerekir. 2.2 ve önceki sürümlerde, selectedRange özelliği aslında bir ekleme noktasıdır.

+1

Bir "NSRange" oluşturma işlevi, beklediğiniz gibi NSMakeRange() '' NSRangeMake() 'değil. – devios1

4

Kabul edilen yanıtta belirtildiği gibi, selectedRange özelliği, gereksinim duyduğunuz şeydir, ancak -textViewDidBeginEditing: temsilci yöntemini kullanıyorsanız, kullanıcı tarafından oluşturulan "ekleme" yi kazanmak için bir çalıştırma döngüsünü ertelemeniz gerekebileceğine dikkat edin. "action:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    // Look for the default message and highlight it if present 
    NSRange defaultMsgRange = [textView.text rangeOfString:NSLocalizedString(@"TEXTFIELD_DEFAULT_MESSAGE", nil) options:NSAnchoredSearch]; 

    BOOL isDefaultMsg = !(defaultMsgRange.location == NSNotFound && defaultMsgRange.length == 0); 
    if (isDefaultMsg) { 

     // Need to delay this by one run loop otherwise the insertion wins 
     [self performBlock:^(id sender) { // (BlocksKit - use GCD otherwise) 

      textView.selectedRange = defaultMsgRange; 

     } afterDelay:0.0]; 
    } 
}