Question

J'ai un problème. Une partie de mon application nécessite le texte à afficher dans une table. Le texte doit être sélectionnable / copiable (mais non modifiable) et toutes les URL dans le texte doivent être mis en évidence et et quand on tape me permettre de prendre cette URL et ouvrir mon navigateur intégré.

Je l'ai vu deux ou trois solutions qui permettent de résoudre l'un ou l'autre de ces problèmes, mais pas les deux.

Solution 1: IFTweetLabel Icône de l'usine

La première solution que j'ai essayé était d'utiliser la classe IFTweetLabel rendue possible par Icône d'usine et utilisé Twitterrific.

Bien que cette solution permet des liens (ou tout ce que vous pouvez trouver avec une expression régulière) à détecter à traiter au cas par cas, elle ne permet pas de sélectionner et copier.

Il y a aussi un problème où si une URL est assez long pour être enveloppé, le bouton que les superpositions de classe au-dessus de l'URL pour le rendre interactif ne peut pas envelopper et soutire l'écran, l'air très étrange.

Solution 2: Utilisation IFTweetLabel et manipuler manuellement copier

La deuxième chose que j'ai essayé était de garder IFTweetLabel en place pour gérer les liens, mais de mettre en œuvre la copie à l'aide d'un geste à long robinet, comme la façon dont les poignées application SMS il. C'était sur le point de travail, mais il ne permet pas de sélection arbitraire de texte, le texte entier est copié, ou n'est copié du tout ... Jolie noir et blanc.

Solution 3: UITextView

Ma troisième tentative était d'ajouter un UITextView comme sous-vue de la cellule du tableau.

La seule chose que cela ne résout pas le fait que détecter les URL ne peuvent pas être traitées par moi. La vue texte utilise la méthode de UIApplication de openURL: qui quitte mon application et lance Safari.

En outre, comme la vue de la table peut être assez grande, le nombre de UITextViews ajouté que subviews provoquent un frein notable des performances sur le défilement tout au long de la table, en particulier sur les appareils de l'ère iPhone 3G (en raison de la création, la mise en page, compositing chaque fois qu'une cellule défile sur l'écran, etc.).

Ma question tout ce que vous gens bien informés là-bas est: Que puis-je faire

Est-ce qu'un UIWebView être la meilleure option? Mis à part un frein de performance, je pense qu'un WebView résoudrait toutes les questions ci-dessus, et si je me souviens bien, de retour dans les 2.0 jours, la vue sur le Web documentation Apple fait recommandée lorsque la mise en forme de texte / liens hypertextes ont été requis.

Quelqu'un peut-il penser à un moyen d'y parvenir sans un frein de performance?

Un grand merci à l'avance à tous ceux qui peuvent aider.

Était-ce utile?

La solution

Dès que je frappe le bouton d'envoi, une nouvelle idée m'a frappé.

J'étais tellement préoccupé d'avoir des URL en ligne avec du texte et interactif que je ne pensais pas que peut-être ce n'est pas la meilleure solution.

Je suis certain que, pour atteindre ce genre de comportement, un UIWebView est le meilleur choix, quels que soient les problèmes de performance.

Cependant, peut-être une meilleure expérience utilisateur / interaction est de ne pas mettre en évidence les URL inline, mais de les rassembler dans un tableau dans les coulisses, et présenter un bouton d'information en vue de la cellule accessoire?

Ensuite, pour la sélection et la copie de texte, je pouvais utiliser le UITextView avec des détecteurs de données désactivé et ne vous inquiétez pas sur les liens envoyés hors de safari et la fermeture de mon application.

Lorsque le bouton d'information est exploité, l'utilisateur pourrait être immédiatement montées à l'URL dans le texte, ou si plus d'une URL est trouvée, présente à l'utilisateur une vue sélecteur pour choisir qui d'aller.

Toutes les pensées / critiques de cette idée sont les bienvenus.

Autres conseils

Vous pouvez empêcher un champ de texte d'être modifié en remplaçant les méthodes délégué UITextField de telle sorte qu'ils ne sont pas applicables toutes les modifications. Cela laisse le champ sélectionnable et copiable mais empêche la modification.

Une meilleure question à poser est la suivante: avez-vous fait pour afficher l'URL elle-même? Pouvez-vous sortir avec juste un nom la page / emplacement, juste le préfixe server.host.domain ou une autre représentation condensée de l'URL? Je ne pense pas que quiconque ce qui est d'essayer de lire une longue URL sur l'écran restreint d'un mobile.

Si vous avez besoin d'afficher l'URL complète alors je pense qu'une vue détaillée est le chemin à parcourir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top