Vai al contenuto

[RISOLTO] UIWebView e NSString


Messaggi raccomandati

Ciao a tutti,

vorrei un aiuto per togliermi qualche fettina di prosciutto davanti agli occhi.

In una NSMutableString aggiungo delle stringhe scritte nel codice, con una formattazione Html.

Subito dopo aggiungo alla stessa NSMutableString una NSString riempita con il testo di un campo UITextView, che contiene ritorni a capo.

Quando vado a riempire la UIWebView con la NSMutableString, tutte le stringhe aggiunte da codice, rispettano la formattazione html scritta, l'aggiunta della NSString non mantiene la formattazione (con i ritorni a capo) che avevo nella UITextView.

Difficile spiegare, spero capiate.

Inutile dire che le ho provate tutte.

Grazie a quanti possono dare una indicazione.

Ciao

Marcello

Link al commento
Condividi su altri siti

Sinceramente non ho capito bene. :gnam:

Non sarà mica che ti sei dimenticato di usare il tag <br /> per mandare a capo il testo html?

Ciao MacMono,

no, prendi una textview multiriga, in esecuzione della app, scrivi al suo interno un testo andando a capo, assegni ad una NSString il valore del testo della textview, prepari una NSMutableString e la inizializzi con una serie di stringhe in linguaggio html con i vari tag che interessano, alla fine aggiungi alla NSMutableString il valore della NSString inizializzata con il testo della TextView.

Prendi la NSMutableString e la passi alla UIWebView come fosse una lunga stringa di testo composta come html e quindi dovresti ritrovarti con una pagina web bella che formattata.

Tutta la parte che da codice è stata aggiunta con i vari tag </br> compreso, funziona, invece la parte aggiunta come testo prelevato dalla NSString riempita con il testo della TextView (che contiene un testo con a capo) continua senza soluzione di continuità come se non avesse appunto ritorni a capo.

?! capito :mhh:

Grazie per avermi risposto.

Marcello

Link al commento
Condividi su altri siti

Ma quindi è come ho detto io!? :fiorellino:

In html gli a capo o gli spazi non vengono considerati, quindi se vuoi che il testo all'interno della pagina renderizzata venga visualizzato correttamente, devi sostituirli con il tag <br />.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Ok allora devo prendere i caratteri di ritorno a capo presenti nella stringa dentro la NSString e sostituirli con i </br>.

Mi ha portato fuori strada il fatto che passando la stessa stringa al corpo di una e-mail html, questa compariva nella corretta forma.

Probabilmente la API deputata alla gestione dell'email mi solleva dal problema.

Ok, ho capito e ti ringrazio, processo la stringa e risolvo il problema.

Alle volte ti blocchi davanti a delle vere banalità e alle volte risolvi questioni complesse come niente.

Che bello...

Ciao e grazie ancora.

Link al commento
Condividi su altri siti

ciao,

il tag <br /> non è letto dalla UIWebView, come anche gli elenchi (per farti un altro esempio). la soluzione al problema è:

* "splittare" il testo che vuoi visualizzare nella UIWebView in un NSArray. avrai, quindi, un NSArray di stringhe.

* allocare una NSMutableString temporanea (la chiamiamo *htmlFinale)

* scorrere l'NSArray e preleva una stringa alla volta e memorizzarla in una variabile NSString temporanea (la chiamiamo *par)

* concatenare par ad htmlFinale

[NSString stringWithFormat:@"<p>%@</p>", par];

ripeti questa concatenazione fino alla fine dell'NSArray

in sostanza ogni ritorno a capo è un paragrafo. avrai un risultato del genere in htmlFinale:

<p> blablablalbla </p>
<p> ... </p>
...

solo così potrai vedere degli effettivi ritorni a capo nella UIWebView

spero tu abbia capito e ti sia stato utile.

Link al commento
Condividi su altri siti

ciao,

il tag <br /> non è letto dalla UIWebView, come anche gli elenchi (per farti un altro esempio). la soluzione al problema è:

* "splittare" il testo che vuoi visualizzare nella UIWebView in un NSArray. avrai, quindi, un NSArray di stringhe.

* allocare una NSMutableString temporanea (la chiamiamo *htmlFinale)

* scorrere l'NSArray e preleva una stringa alla volta e memorizzarla in una variabile NSString temporanea (la chiamiamo *par)

* concatenare par ad htmlFinale

[NSString stringWithFormat:@"<p>%@</p>", par];

ripeti questa concatenazione fino alla fine dell'NSArray

in sostanza ogni ritorno a capo è un paragrafo. avrai un risultato del genere in htmlFinale:

<p> blablablalbla </p>
<p> ... </p>
...

solo così potrai vedere degli effettivi ritorni a capo nella UIWebView

spero tu abbia capito e ti sia stato utile.

Credo che ci sia qualche cosa che mi sfugge.

Il tag /br viene letto, infatti io lo implemento a livello di codice passando ad una NSMutableString una stringa con contenuti i tag, anche quelli degli elenchi. La formattazione che viene visualizzata nella UIWebView è corretta.

Se faccio come dici tu, che cosa mi dice che alla fine di una frase o di una parola c'è effettivamente un ritorno a capo?

Io penso che devo tovare, nel testo della NSString ricavata dal valore Text della UITextView, un carattere che mi dica che al termine di una frase, tra le molte contenute, ha un rientro a capo, immagino che questo abbia un valore esadecimale "D" ovvero carriage return e a quel punto sostituirlo con un tag </br>. Quando ho fatto il parsing del testo e trasformato i valori splittando tutto in una nuova NsString, a quel punto posso unirla all'altro codice...

:ghghgh:

Che dici?

Grazie per la tua risposta.

Ciao

Marcello

Link al commento
Condividi su altri siti

il tag <br /> non è letto dalla UIWebView, come anche gli elenchi (per farti un altro esempio).

Per curiosità, dove l'hai letta 'sta roba?

Perché sembra proprio una ca**ata.

Non perché l'hai detta tu, naturalmente, :ghghgh: ma perché mi sambra alquanto strano che una webView non riconosca un tag basilare dell'html. :dance:

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

guarda, io ho provato a fare così:

htmlFinale = [htmlLetto stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"];

ed ho passato htmlFinale una UIWebView così:

[webView loadHTMLString:htmlFinale  baseURL:nil];

il testo nella UIWebView era senza ritorni a capo. forse è il simulatore? prova tu stesso...

per quanto riguarda la domanda di mballic

Se faccio come dici tu, che cosa mi dice che alla fine di una frase o di una parola c'è effettivamente un ritorno a capo?

se conosci l'html e il tag <p>..</p>, questo definisce un paragrafo. la definizione di paragrafo è "ciascuna suddivisione interna di un capitolo o sezione in un testo", quindi avrai l'effetto sperato.

leggendo su iphonesdkforum, uno ha risolto così:

NSString *HTMLData = author;
HTMLData = [htmlData stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"<br>"];
[webView loadHTMLString:HTMLData baseURL:nil];

io non l'ho provato. semmai lo provo dopo.

Link al commento
Condividi su altri siti

Allora cari amici, prima di tutto grazie. Le soluzioni fino ad ora provate non portano da nessuna parte. Vi faccio vedere un po' di codice per capire quello che io sto facendo e non riesco a risolvere:

NSMutableString *htmlData;
...
...
[htmlData appendString: (@"<br>")]; //(PERFETTO FUNZIONA)
...
...
[htmlData appendString: (@"<h1>")]; //(PERFETTO FUNZIONA)
[htmlData appendString: (@"%@", contattoAzienda)]; //(PERFETTO FUNZIONA)
[htmlData appendString: (@"</h1> <ul>")]; //(PERFETTO FUNZIONA)
....
....
NSString *esaDec = UITextView.text; // (IL TESTO E STATO IMMESSO DALL'UTENTE CON DEI RITORNI A CAPO NELLA TEXTVIEW)
....
....
[htmlData appendString: (@"<br>")]; //(PERFETTO FUNZIONA)
...
....
[webView loadHTMLString:htmlData baseURL:nil];

Tutti i TAG scritti da codice mantengono la formattazione, la formattazione invece contenuta nella TextView NO!

Provando la versione proposta dai vari consigli, non ho ottenuto niente, neanche da quello proposto da iphonesdkforum, peraltro meta assidua delle mie ricerche.

Il problema è legato al formato della NSString UNICODE che al momento di passarla alla WebView chiaramente non passa il carattere di ritorno a capo contenuto.

Devo trovare il meccanismo per sostituire tale carattere con la sequenza di caratteri "<br"

Provata anche questa:

NSString *htmlDataPerfect = [esaDec stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"<br>"];

Right ?!

:ciao:

Ciao e grazie

Marcello

Link al commento
Condividi su altri siti

Provata anche questa:

NSString *htmlDataPerfect = [esaDec stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"<br>"];

Quella non funziona di sicuro.

Al massimo può essere senza il doppio slash, in modo che ti cerca la sequenza di CR LF, ma teoricamente dovrebbe bastare quello già pubblicato da deepswing.

htmlFinale = [htmlLetto stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"];

Magari fai una prova con questo e stampa la stringa ottenuta con NSLog, poi postrala qui, per vedere quello che hai ottenuto.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

htmlFinale = [htmlLetto stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"];

Questa soluzione ha risolto il problema, la formattazione è corretta.

Vi ringrazio per l'aiuto, avete contribuito a farmi capire meglio alcune cose.

Grazie e ciao

Marcello

Link al commento
Condividi su altri siti

damn, e come mai a me non funziona??? :)

Guarda a me funziona, ti metto la stringa esatta, ma non cambia.

NSString *htmlDataPerfect = [self.notes.contattoNote stringByReplacingOccurrencesOfString:@"\n" withString:@"<br>"];

Io credo che forse ha a che fare con la prima parte della MutableString che è l'head dello HTML :

NSString *embedHtml = @"<html><head> <style type=\"text/html; charset=UTF-8\"> body {background:#f2fae9;color:#000000} </style> ";

o forse con l'ultima dove assegni la stringa alla WebView:

[self.textcontattoNoteWeb loadHTMLString:htmlData baseURL:[NSURL fileURLWithPath:documentsDirectory]];

So solo che ce ne ho messo un po' ad arrivarci...

Ciao e spero ti sia d'aiuto.

Marcello

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...