2011-07-08 9 views
18

¿Cuál es la mejor manera de mostrar mucha de texto enriquecido (formato HTML)Viendo Porciones de texto enriquecido: elegir la mejor opción

En este momento estoy trabajando en una aplicación para un foro. Como era de esperar que las publicaciones en el sitio tengan muchos formatos HTML, listas, imágenes texto en negrita, texto en color, etc ...

Ahora se me ocurren varias opciones (ninguna de ellas ideal, por favor, si se piensa en cualquier otra opción de publicarlos en los comentarios):

  • células personalizados mediante NSAttributedString+HTML + DTAttributedTextView para cada puesto?

    Problemas: utilicé las categorías NSAttributedString + HTML en la aplicación en otro lugar y era menos que ideal, la creación de un NSAttributedString parece ser bastante costosa (lenta) incluso en pequeñas cantidades. Para más de 10 publicaciones cada una puede ser la longitud de un artículo completo sería horrible + aunque DTAttributedTextView admite la etiqueta IMG html (la mayoría de las etiquetas) no admite la carga remota de imágenes a menos que especifique su ancho y altura en la etiqueta img Y para un foro donde una etiqueta IMG podría ser una carita sonriente (10 * 10) o una captura de pantalla (640 * 960) no hay forma de predecir eso. (Desde la redacción de este NSAttributedString + HTML, que ahora se renombró DTCoreText, ha añadido soporte completo para <img> etiquetas y mejorado mucho!)

  • células personalizados con un UIWebView en ellos para cada puesto?

    Ésta consideré durante bastante tiempo, sin embargo al leer this blog post me di cuenta de un problema que podría causar, desplazamiento suave. La idea de tener una aplicación nativa para un sitio es que es mejor y luego usa un UIWebView simple para ver el tema del sitio móvil. Si la aplicación se demora y es espasmódica mientras se desplaza, peor no es mejor (también porque necesito mostrar imágenes que ocultan la vista web como sugiere que no funcionaría). También es necesario crear UIWebView en el hilo principal o se rompen.

  • Volver a la vista de UIWebView? Molesto además de hacer una trampa patética (como en el iFans app) donde solo se muestra texto y luego, si hacen clic en él, se carga una UIWebView con todas las imágenes agradables, etc., la única opción que queda parece ser hacer lo que yo Creo que la aplicación TapaTalk lo hace y tiene toda la vista de subprocesos como UIWebView. Esto no es demasiado malo, ya que probablemente tendrá un rendimiento bastante bueno y me permitirá posiblemente agregar temas controlados por el usuario, etc. pero me parece repulsiva la idea de usar un UIWebView en un sitio web nativo.

¿Alguien tiene alguna experiencia en la creación de aplicaciones Web con alimentación, como tal un cliente de Facebook, la aplicación foro, o una nueva aplicación web que tenía para mostrar el contenido del sitio (que no cuentan realmente un cliente de Twitter ya que solo tiene que tratar con enlaces de texto & en pequeñas cantidades por publicación). ¿O alguna idea sobre la mejor manera de mostrar el contenido de RichText en una aplicación de iOS?

Cualquier idea tendría que hacer frente a la gran cantidad:

  • texto Colorido.
  • Derecha, izquierda & texto alineado en el centro.
  • Imágenes (de tamaño variable).
  • Texto en negrita.
  • Texto de diferentes tamaños & fuentes.
  • Subraya el texto.
  • Videos de YouTube.
  • tablas HTML.

Sólo en caso de la pregunta real no era muy claro en todos que voy a resumir:

"¿Cuál es la mejor manera de mostrar una gran cantidad de texto enriquecido (formato HTML) contenido para una aplicación de cliente de foro "

Respuesta

3

Entonces, si estoy leyendo este derecho, ¿desea que las publicaciones del foro de un tema determinado sean celdas de una UITableView y las celdas necesitan un formato enriquecido?

Suponiendo que esto sea correcto, me imagino que cada publicación ocupará una gran parte de la pantalla (gran altura de celda). En este caso, tener una UIWebView como una subvista podría no ser tan mala para el rendimiento como podría pensar. UITableView reutiliza las celdas, por lo que realmente solo las celdas visibles deben cargarse en la memoria.

También estoy asumiendo que puede acceder al foro a través de una API, ¿verdad? En ese caso, debería poder precargar datos inmediatamente antes de cargar la vista y UIWebViews solo se usará para formatear. Incluso puede cargar un archivo CSS desde su paquete de aplicaciones cuando carga HTMLString en su UIWebView para que no lo cargue desde un servidor cada vez.

Dicho todo esto, si tuvieras muchas celdas simultáneamente visibles, podría ser una historia diferente y tal vez consideraría solo mostrar texto sin formato en el índice UITableView y mostrar el formato enriquecido solo cuando el usuario toque el celda para ver la publicación individual. Esto también podría ser mejor desde el punto de vista del diseño, ya que tener un montón de celdas formateadas de forma diferente en la pantalla podría terminar viéndose un poco descuidado.

Además, esto puede ser obvio (especialmente porque parece que tiene en cuenta el rendimiento y el diseño), pero no use UIWebView para los controles de la interfaz de usuario. Cada vez que veo una barra de pestañas UIWebView o una barra de navegación falsa, me avergüenzo (ack, Netflix). Sin embargo, para formatear, muchas veces es la única forma de volar si está cargando mucho contenido dinámico de un servidor.

+0

Sí, realmente no me gustan los controles falsos HMTL UIKit también. Gracias por la respuesta, después de leer tu comentario, probé con UIWebView en una celda de vista de tabla. A pesar de que funcionó bastante bien, cada llamada tuvo que volver a cargar su contenido cuando me desplacé hacia él y era bastante desigual al desplazarme. Por lo tanto, es probable que use un UIWebView para el texto enriquecido (aunque personalizado con JavaScript, una política de caché personalizada y un menú contextual personalizado). Realmente me gustaría que Apple traiga el motor de texto OSX a iOS, con soporte completo de edición de texto enriquecido. –

+0

Voy a esperar un tiempo para ver si alguien que haya hecho una aplicación similar antes de las publicaciones sobre su experiencia heredera antes de marcar esto como respondido. –

+0

Después de algunas pruebas siento decir ** BY FAR ** la opción con el mejor rendimiento es una UIWebView. –

2

NSAttributedString + HTML ya admite la carga diferida de imágenes. Vea la demostración que muestra cómo hacerlo. Es razonablemente rápido, pero desea conservar el análisis del HTML para el contenido que no está en la pantalla.

En su mayoría depende de qué UI desea lograr. NSAS + HTML está diseñado para situaciones en las que usted controla la calidad del HTML (es decir, porque lo genera usted mismo). Allí le brinda un nivel de control sin precedentes sobre la jerarquía de vistas porque puede incrustar sus propias vistas personalizadas para mostrar imágenes.

En otros casos en los que no puede estar seguro de la calidad del código HTML, debe usar UIWebView y solucionar sus limitaciones, una de las cuales es que requiere una gran cantidad de RAM y demora la visualización de los contenidos. Además, UIWebView no es seguro para subprocesos (porque WebKit no lo es).

Cuestiones relacionadas