2013-04-26 15 views
9

Questa domanda riguarda l'implementazione del rientro del testo ("Posizionamento del testo più a destra per separarlo dal testo circostante") in iOS.Obiettivo c - Indentazione del testo

Prendiamo ad esempio il seguente testo:

  1. Questa è la prima sezione.
  2. Questo è il secondo,
    con due linee.
  3. Questo è il terzo.

Si noti che la seconda riga nella sezione 2 inizia più a destra e appena sotto la riga sopra.

Il mio codice contiene un array di NSString, ognuno deve essere visualizzato come una sezione con un punto elenco numerico come sopra. ad esempio:

NSArray *array = [NSArray arrayWithObjects:@"1. This is the first section.", @"2. This is the second one, with two lines.", @"3. This is the third.", nil]; 

Io uso UILable per visualizzare il testo sullo schermo.
per impostare il testo da matrice per l'etichetta, e per separare ogni stringa in una nuova linea che uso

myLabel.text = [array componentsJoinedByString:@"\n"]; 

Delle idee come ottenere questo effetto?

+0

u bisogno di ignorare il drawRect (per il controllo) e la necessità di scrivere il proprio codice indentazione per risolvere questo problema. – samfisher

+0

Stai provando a farlo in un elenco puntato come mostrato?Come stai rendendo il blocco generale? Puoi dare più contesto? –

+0

@BrianNickel sì ho bisogno dello stile bullet, ho aggiunto informazioni alla mia domanda. – Eyal

risposta

2

Bene, ho deciso di implementarlo autonomamente senza utilizzare Core Text, ho appena creato una struttura di visualizzazione che ha consentito a tutti i rientri di lavorare autonomamente e di personalizzarlo come desiderato.

Per tutti voi interessati alla realizzazione, si può vedere il codice sorgente e un progetto di esempio qui:
ECListView Project

0

UILabel non ha intenzione di tagliarlo se si hanno requisiti di layout specifici. Per questo, dovrai scavare nel Core Text. La buona notizia è che il Core Text ti permetterà di fare qualsiasi tipo di layout di testo che tu possa immaginare. La cattiva notizia è che tutto quel potere porta con sé una certa complessità, quindi per usarlo dovrai investire un po 'di tempo per imparare come funziona il framework.

Un'alternativa adatta in alcune situazioni è l'utilizzo di una visualizzazione Web per visualizzare il testo. UIWebView ti consente di eseguire qualsiasi layout di testo gestibile tramite HTML e CSS.

+0

10x per la tua risposta, ho immaginato che avrò bisogno di usare il framework Core Text. Questo è un problema molto generico, suppongo che molte persone già affrontino questo problema e abbiano implementato qualche soluzione generica. Quindi preferisco non inventare di nuovo la ruota ma per ottenere qualche riferimento ad alcuni frammenti di codice o tutorial. – Eyal

25

Ciò è possibile in una certa misura in iOS6 con - [UILabel setAttributedText:].

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.headIndent = 29; 

myLabel.attributedText = [[NSAttributedString alloc] initWithString: 
    @"1.\tShort line.\n2.\tLong line with content that triggers wrapping.\n3.\tShort line." 
    attributes:@{NSParagraphStyleAttributeName: paragraphStyle}]; 

Result of the above code

Ciò aggiunge rientro alle righe successive. Sembra che iOS non supporti i punti di tabulazione allo stesso modo di OSX, quindi non vedo un modo per regolare il divario tra il numero e il testo. Questo è probabilmente possibile in CoreText.

Naturalmente, Si potrebbe anche solo sostituire l'etichetta con un UIWebView e avere il pieno controllo della formattazione su tutte le versioni di iOS al costo delle prestazioni.

+0

grazie, ma ho bisogno di una soluzione ios 5 – Eyal

+1

Esattamente quello che mi serve – onmyway133

+1

È fantastico, grazie! –