2013-04-26 14 views
9

To pytanie dotyczy implementacji wcięcia tekstu ("Umieszczenie tekstu na prawo w celu oddzielenia go od otaczającego tekstu") w iOS.Cel c - Wcięcie tekstu

Weźmy na przykład następujący tekst:

  1. Jest to pierwszy odcinek. To jest drugie,
    z dwiema liniami.
  2. To jest trzeci.

Zauważ, że drugi rząd w sekcji 2 zaczyna się dalej w prawo i tuż pod linią powyżej.

Mój kod zawiera tablicę o numerze NSString, z których każdy powinien być wyświetlany jako sekcja z numeryczną kulą jak powyżej. na przykład:

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]; 

Używam UILable do wyświetlania tekstu na ekranie.
Aby ustawić tekst z tablicy na etykiecie i oddzielić każdy łańcuch w nowej linii używam

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

pomysłów, jak uzyskać taki efekt?

+0

u trzeba zastąpić drawRect (dla kontroli) i trzeba napisać swój własny kod wcięcia rozwiązać ten problem. – samfisher

+0

Czy próbujesz to zrobić na wypunktowanej liście, tak jak pokazano?Jak renderujesz cały blok? Czy możesz podać więcej kontekstu? –

+0

@BrianNickel Tak, potrzebuję stylu punktora, dodałem informacje do mojego pytania. – Eyal

Odpowiedz

2

Cóż, zdecydowałem się zaimplementować to samodzielnie bez użycia Core Text, po prostu utworzyłem strukturę widoku, która sprawia, że ​​wszystkie wcięcia działają same z siebie i pozwalają dostosować je do własnych potrzeb.

Dla wszystkich zainteresowanych w realizacji, można zobaczyć kod źródłowy i przykładowy projekt tutaj:
ECListView Project

0

UILabel nie zamierza go ciąć, jeśli masz jakiekolwiek szczególne wymagania dotyczące układu. W tym celu musisz przekopać się na tekst rdzenia. Dobrą wiadomością jest to, że Core Text pozwoli ci na dowolny układ tekstu, jaki możesz sobie wyobrazić. Złą wiadomością jest to, że cała ta moc niesie ze sobą pewną złożoność, więc aby z niej skorzystać, trzeba będzie poświęcić trochę czasu na poznanie, jak działa ta struktura.

Alternatywnym rozwiązaniem w niektórych sytuacjach jest użycie widoku internetowego w celu wyświetlenia tekstu. UIWebView pozwoli ci zrobić układ tekstu, którym możesz zarządzać za pomocą HTML i CSS.

+0

10x za odpowiedź, wyobrażałem sobie, że będę musiał użyć struktury Core Text. Jest to bardzo ogólny problem, przypuszczam, że wiele osób już odrzuciło ten problem i wdrożyło ogólne rozwiązanie. Więc raczej nie wymyślam koła ponownie, ale aby uzyskać odniesienie do fragmentu kodu lub samouczka. – Eyal

25

Jest to możliwe do pewnego stopnia w iOS6 z - [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

Dodaje wcięcia do kolejnych wierszy. Wygląda na to, że iOS nie obsługuje tabulatorów w taki sam sposób, jak w systemie OSX, więc nie widzę sposobu na dostosowanie luki między liczbą a tekstem. Jest to prawdopodobnie możliwe w CoreText.

Oczywiście można też po prostu zastąpić etykietę z UIWebView i mieć pełną kontrolę formatowania we wszystkich wersjach iOS kosztem wydajności.

+0

dziękuję, ale potrzebuję rozwiązania ios 5 – Eyal

+1

Dokładnie to, czego potrzebuję – onmyway133

+1

To genialne, dzięki! –