43 votes

UITextView avec mise en évidence de la syntaxe

Double Possible:
UITextView w/ colorisation de Syntaxe

J'ai trouvé une question sur ce déjà, mais il n'avait pas une réponse complète à elle.

Est-il un Cadre ou d'une Bibliothèque qui peut faire de la coloration syntaxique dans un UITextView, plus précisément de la syntaxe (et de détection) pour Objective-C sur l' iPhone.

Certaines de mes Idées de comment faire ceci:

  • NSAttributedString. Maintenant disponible dans iOS 3.2 et plus. Mais comment pourrais-je mettre un NSAttributedString dans un UITextView?
  • UIWebView. Superposer lorsque l'utilisateur a terminé l'édition et la couleur du texte avec les feuilles de styles CSS. Mais comment pourrais-je le faire dans un UIWebView, donnant le texte, puis le colorer?

79voto

Max Seelemann Points 6345

Mise à JOUR: Depuis iOS 7 et TextKit, la coloration syntaxique est devenu simple comme bonjour. Ne cherchez pas plus loin qu'ici pour une introduction (par moi).


En supposant que vous souhaitez être modifié composant, il n'y a pas trop d'espoir. Donner un aperçu rapide, juste pour vérifier que j'ai tout couvrir:

  • UITextView: texte brut uniquement, pas d' (public) autour. Mais modifiable. Aucune chance de modifier quoi que ce soit, aucune chance d'obtenir la géométrie etc. Utilise un affichage web en interne. Chaque paragraphe est une <div>, qui est modifié par le moteur de montage. Vous pouvez modifier le DOm là, mais c'est tout API privée. Toutes privées, par conséquent, aucune option.
  • UIWebView: html, de sorte qu'il peut être de style, contiennent des images, etc. Je suppose (sans regarder) que c'est ce que mentionnées précédemment, Trois 20 INTERFACE utilisateur utilise. Le problème: ne peut pas être modifié. Il n'y a pas (public) moyen de contourner cela. Vous canot obtenir des sélections, l'accès au DOM, etc ... sans API privée et beaucoup de maux de tête. L'édition fonctionnerait comme dans UITextView mais nécessitent un tout nouveau niveau de maux de tête. Encore privée.
  • CoreText Cadre: Depuis iOS 3.2 un très très bon rendu du moteur. Mais c'est tout. Peut directement mise en page et afficher NSAttributesStrings. Cependant, il n'existe aucune interaction de l'utilisateur. Pas de sélection de texte, pas de saisie de texte, pas de vérification de l'orthographe, pas de remplacements, pas de faits saillants, pas de pas de pas de pas de pas de. Juste le rendu. Et un peu de travail à faire rapidement sur les anciens appareils avec de longs textes.
  • UITextInput Protocole: Permet l'interaction avec le clavier et saisir la saisie de texte. Également des fonctionnalités de base du texte de remplacement. Problème: la saisie de texte seulement, mal documenté. Pas de sélection de texte etc (voir ci-dessus).

Nous sommes donc ici. Deux composantes fonctionnelles qui manque une fonction centrale et deux solutions partielles qui manque le chaînon manquant. Voici toutes les approches viables que je peux venir avec:

  • Demandez à l'utilisateur de modifier un UITextView non stylé et afficher le contenu de style dans une UIWebView. Pour le second point, vous pouvez utiliser le Three20 chose.
  • Construire le chaînon manquant entre l' CoreText et UITextInput. Cela inclut, mais n'est pas limité à, la sélection de texte, mettre en évidence, les couleurs de fond, de texte, de stockage et de gestion, l'efficacité, la vérification orthographique, etc. Certains de ces services sont fournis par les cadres du système, mais encore besoin de beaucoup de l'intégration.
  • Soumettre un rapport de bogue et d'attendre une belle API publique à venir (mon approche personnelle).
  • Convaincre Apple de permettre à des API de nouveau et le désordre avec UItextViews DOM.

L'Omni Group a pris la deuxième approche et créé un texte éditable à vue. Vous pouvez le trouver dans la OmniUI cadre. Toutefois, cette mise en œuvre est loin d'être parfait. (au moins, c'était la dernière fois que j'ai vérifié il y a quelques mois). Ils ont essayé mais n'a toujours pas réussi à obtenir de Pommes de perfection dans l'interaction de l'utilisateur. Apple doit avoir investi au moins quelques années d'en faire qu'à l'INTERFACE utilisateur de l'interaction avec la sélection de texte et d'édition. Rien à faire à la maison, et comme il semble que même pour les sociétés que pour l'omni group.

Il y a un aspect intéressant de tout cela: de la suite iWork. Apple revendique de ne pas utiliser les API privée en eux. Mais la sélection de texte est le même que dans l'OS. Donc ils doivent être copiés cadre de la source dans les applications. Très honnête ;)

12voto

mxcl Points 5921

Depuis iOS 5, vous pouvez utiliser un UIWebView et définir contenteditable="true" sur un div qu'il contient. UIWebView ouvre ainsi un clavier et permet à l'utilisateur de saisir directement du texte dans le DOM. Vous pouvez ensuite écrire une application Web qui met en évidence la syntaxe. Vous pouvez communiquer avec l'application cacao avec des URL personnalisées.

Le seul problème que j'ai est que vous ne semblez pas avoir de vérification orthographique.

9voto

SAKrisT Points 2229

J'ai sous-classé un UITextView et écrasé drawRect pour implémenter la coloration syntaxique.

code source http://github.com/sakrist/SUITextView

4voto

Aleph7 Points 1944

Voici une implémentation qui utilise les fonctionnalités d'édition d'un UITextView et d'un rendu CoreText personnalisé: http://www.a-coding.com/2012/03/syntax-highlighting-in-ios.html

2voto

MattDiPasquale Points 23842

JTextView est un remplacement UITextView qui prend en charge un magasin de texte NSAttributedString . Il permet l'affichage de texte enrichi mais est incomplet.

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