59 votes

UITextView de détection de liaison dans iOS 7

J'ai un UITextView qui est géré via une Interface Builder. Comme les données de détection, j'ai "Liens" est cochée. Dans iOS 6 tout fonctionne bien et les liens sont mis en évidence et sont cliquables. Dans iOS 7, tous les liens restent juste du texte brut. L'modifiable et sélectionnable cases sont décochées.

Ce qui peut être inquiétant est que l' UITextView est une sous-vue d'un conteneur de vue, qui est de nouveau à l'intérieur d'un UIScrollView.

70voto

derkleinekauz Points 737

Il semble que dans iOS 7 de détection de liaison ne fonctionne que si l' UITextView est sélectionnable. Afin de faire mon UITextView pas sélectionnable par l'arrêté de la le lien de détection de travail.

J'ai également testé cette sous iOS 6, et je peux confirmer que dans iOS 6 le lien de détection fonctionne très bien, même avec l' UITextView de ne pas être sélectionnables.

32voto

Theo Bendixson Points 296

J'ai eu quelques problèmes avec le numéro de téléphone de détection d'aujourd'hui. Il semblait que la UITextView permettrait de conserver de vieux numéros de téléphone et de conserver le texte sélectionné après j'avais mis le texte à autre chose.

J'ai trouvé que si je setText:néant avant d'établir le texte de la nouvelle chaîne, il serait réinitialiser le textview, et les numéros de téléphone en surbrillance lorsque la normale. Je me demande si ce n'est une sorte de bug avec UITextView dans iOS 7.0

De toute façon, cela a fonctionné pour moi.

26voto

Raconteur Points 581

Lorsque iOS7 premier est sorti cette proie moi et j'ai trouvé une réponse dans ce fil (réglage de l'attribut de texte de la UITextView à zéro avant le réglage de la valeur réelle a fait le tour). Puis tout à coup, le problème (pour moi, c'était l'ensemble de la chaîne en surbrillance comme un lien) recadrée de revenir en arrière (en raison d'une mise à jour d'iOS).

Ce qui finalement fait le truc pour moi c'est de cesser d'utiliser l'attribut de texte et définissez la attributedText. Une fois que je l'ai fait, la nécessité d'établir des polices/défilement/sélectionnable/modifiable/etc. par programmation, a disparu. J'ai défini mon UITextView de l'IB, définissez les valeurs que je voulais (pas de défilement, non modifiable, le choix, la détection de liens et numéros de téléphone), puis construit une attribuée à cordes et ensemble:

myUITextView.attributedString = myAttributedString;

Et soudain, tout a fonctionné comme prévu. Espérons que cela aide quelqu'un d'autre en bas de la route.

18voto

svarrall Points 166

J'ai eu le même problème et la désactivation de défilement sur la UITextView active le lien de détection de la charge plutôt que de travailler uniquement une fois que l'utilisateur a interagi avec le textview. Le UITextView également être sélectionnable et non-modifiable.

detailTextView.scrollEnabled = NO;
detailTextView.editable = NO;
detailTextView.selectable = YES;

Cours de les sélectionner ou de les avoir faites défiler permis n'est pas nécessaire sur iOS6.

Une autre chose à vérifier est que userinteraction est activé sur la cellule et l'affichage du contenu de la cellule, sinon le lien ne sera pas cliquable.

8voto

Daniel Points 14150

Vous devriez vérifier NSDataDetector.

Vous pouvez l'utiliser pour rechercher et traiter des données différentes (liens, numéros de téléphone et plus). Jetez un oeil sur ce site:

http://nshipster.com/nsdatadetector/

Vous pouvez également utiliser l' dataDetectorTypes de la propriété de l' UITextView pour définir ce que vous voulez détecter dans le code. Peut-être simplement d'un scénario de transition problème pour vous.

textView.dataDetectorTypes = UIDataDetectorTypeLink;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X