2015-06-29 1 views
5

Ho seguito questo: UILabel and NSLinkAttributeName: Link is not clickable e UITextView link is clickable, but when I click it, Safari doesn't open ma senza successo.UITextView link non cliccabile iOS 8

ho:

uitextView.attributedText = ... some attributed string "http://google.com" ... 

"Link di rilevamento", "selezionabile" e "interazione con l'utente abilitato" sono abilitati. "editable" è disabilitato.

Ho anche implementato UITextViewDelegate

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange 
{ 

    return YES; 
} 

Tuttavia, il legame appare blu, ma quando scatto, non succede nulla.

+0

Stai impostando correttamente il tuo delegato? Sei sicuro di 'textView: shouldInteractWithURL: inRange:' viene effettivamente chiamato? – JAL

+0

@ JAL non è, questo è il problema. perché non viene chiamato? – Lucas

+0

Imposta 'uitextView.delage = self? E la tua classe in questo modo? '@interface MyView: UIViewController ' – JAL

risposta

1

Prova prendere questo approccio:

NSString *clickMe = [NSString stringWithFormat:@"%@", word]; 
    NSMutableAttributedString * str2 = [[NSMutableAttributedString alloc] initWithString:word]; 
    [str2 addAttribute: NSLinkAttributeName value:[NSURL URLWithString:[NSString stringWithFormat:@"https://twitter.com/%@",linkWord]] range:NSMakeRange(0, clickMe.length)]; 

    // replace with link 
    [YourAttributedString replaceCharactersInRange:wordRange withAttributedString:str2]; 
2

Ho avuto lo stesso problema. Niente ha aiutato.

Il problema era che ho aggiunto UITextView a ScrollView e quindi utilizzato sizeToFit.

Ad esempio: view.frame (0,0,320,440). E ScrollView contentSize (0,0,320,1000) E i collegamenti in view.frame funzionano ma quando si scorre verso il basso - non.

Rispetto a quanto ho provato a verificare quale vista viene selezionata quando si scorre verso il basso e si tocca UITextView. Ho aggiunto UITapGestureRecognizers e ho scoperto che quando tocco i limiti del frame self.view nei limiti di UITextView, toccava su UITextView. Ma quando scorro verso il basso - il rubinetto riconosce come toccare ScrollView. In altre parole, è come un frame di clip UITextView per limiti self.view.

EDIT: ho trovato il problema:

ho avuto View - ScrollView - ContentView - Elements gerarchia. Quindi c'è stato un tempo in cui ScrollView era più grande di ContentView, quindi il collegamento può essere sfruttato solo nei limiti di ContentView. Per risolvere questo ho eliminato ContentView e metto tutti gli elementi a ScrollView. Spero che questa risposta possa aiutare qualcuno :)

+0

Questo dovrebbe essere contrassegnato come una risposta corretta. Purtroppo, ContentView che deve essere aggiunto a causa dell'autolayout presenta problemi lì. Quando si esegue questa operazione, si deve anche fare attenzione a spostare ContentView in modo appropriato, in modo che non blocchi i tocchi, se UITextView è dietro di esso. – Reconquistador