2013-05-13 31 views
5

Potrzebuję podkreślić pewną część UILabel, jak sugeruje tytuł. Na przykład: Please click ESPNSoccernet to read the latest Football News. Chciałbym podkreślić słowo ESPNSoccernet. Dzieje się tak dlatego, że chcę, aby było klikalne i musi zawierać link do strony internetowej.Podkreślenie pewnej części UILabel

Potrzebujesz wskazówek, jak to zrobić. Jeśli istnieje inna droga, mów mi ...

+1

Użyj do tego łańcucha html. Pokaż w niestandardowej etykiecie obsługującej przypisane ciągi. – Divyu

+0

może pokazać mi przykład ... – lakesh

+0

Możesz wypróbować http://stackoverflow.com/questions/7385892/how-can-i-set-substring---string-as-bold-in-uilabel –

Odpowiedz

14

dla iOS 6, można użyć AttributedStrings

NSMutableAttributedString *yourString = [[NSMutableAttributedString alloc] initWithString:@"Please click ESPNSoccernet to read the latest Football News."]; 
[yourString addAttribute:NSUnderlineStyleAttributeName 
         value:[NSNumber numberWithInt:1] 
         range:(NSRange){0,25}]; 

label.attributedText = [yourString copy]; 

można również używać 3rd party UILable bibliotekę TTTAttributedLabel.

1

UILabel jest zdolny tylko do wyświetlania ciągów zwykły tekst (w iOS 6 może teraz również wyświetlać NSAttributedString s, ale to nie będzie działać w starszych wersjach iOS, więc najlepiej jest nie polegać na tym), więc nie będzie można tego zrobić z etykietą.

Możesz zobaczyć TTTAttributedLabel, aby wyświetlić przypisany tekst (aby dodać podkreślenia i inne formatowanie), ale nie będziesz mógł dodawać hiperłączy do tej klasy.

opcje masz na klikalnego segmencie łańcucha są zasadniczo:

  1. Korzystając zwykły UILabel i nakładki UIButton nad częścią, którą chcesz być klikalny lub

  2. Użyj TTTAttributedLabel, aby uzyskać efekt podkreślenia, oraz UITapGestureRecognizer do wykrywania i obsługi kliknięć (zauważ, że spowoduje to przechwycenie stuknięć na etykiecie całej, a nie tylko podkreślonej części).

Dla iOS 6:

UILabel *label = [[UILabel alloc] init]; 
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Tap here to read the latest Football News."]; 
[string addAttribute:NSUnderlineStyleAttributeName value:@(1) range:NSMakeRange(4, 4)]; 
label.attributedText = [string copy]; 

dla wcześniejszych wersjach systemu iOS, jak i iOS 6:

TTTAttributedLabel *label = [[TTTAttributedLabel alloc] init]; 
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Tap here to read the latest Football News."]; 
[string addAttribute:NSUnderlineStyleAttributeName value:@(1) range:NSMakeRange(4, 4)]; 
label.text = [string copy]; 

następnie dodać rozpoznającym gest i wdrożenia handleTap::

UITapGestureRecognizer *recogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[label addGestureRecognizer:recogniser]; 

- (void)handleTap:(UITapGestureRecognizer *)recogniser { 
    // Handle the tap here 
} 
+0

w iOS 6.0 UILabel obsługuje NSAttributedString – Bonnie

+0

@Bonnie tak, ale większość programistów nie może obecnie nie obsługiwać systemu iOS 5, więc najlepiej jest użyć czegoś, co działa również w starszych wersjach oprogramowania. – Greg

+0

Właśnie rzuciłem okiem na TTTAttributed Label. Wygląda na to, że zezwalają na linki .. – lakesh

-2

Możesz użyć numeru UIWebView i wstaw jakiś kod HTML, aby uzyskać pożądane formatowanie. HTML zawiera także premię do hiperlinku, chociaż strona internetowa będzie zawarta wewnątrz samego widoku.

EDYCJA: Ta metoda będzie działać z iOS 2.0 i nowszymi, więc nie będzie problemu z tym na starszych urządzeniach.

Aby to zrobić, dodaj UIWebView do pożądanego widoku i utwórz dla niego ujście (w celach poglądowych nazywam mój webView).

W metodzie viewDidLoad dodać:

NSString *HTML = @"<p>Please click <a href=\"http://www.espnfc.com\">ESPNSoccernet</a> to read the latest Football News</p>"; 
[webView loadHTMLString:HTML baseURL:nil]; 

Hope this helps ...

+0

Innymi słowy, sugerujesz, że hiperlink może być otwierany w linii prostej w małym widoku o pojedynczej linii tekstu, co zdecydowanie nie jest dobrym rozwiązaniem. – Greg

+0

Ponadto, używanie widoku internetowego do wyświetlenia pojedynczego wiersza tekstu jest dość przesadne i niesie ze sobą wiele niepotrzebnych narzutów, kiedy można to zrobić znacznie prościej. – Greg

+0

Nie sugerowałem, że jest to "całkowicie akceptowalne". – Hacker

0

Jeśli ta aplikacja dla iOS 6 lub nowszej w tym przypadku można użyć NSMutableAttributedString

NSMutableAttributedString *labelText = [[NSMutableAttributedString alloc] initWithString:@"Hello this is demmy label for testing"]; 
    [labelText addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1] 
     range:(NSRange){10,10}]; 

    label.attributedText = labelText; 

dla mniejszej wersji można używać tak ..

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 116, 171, 20)]; 
label.text = @"Hello this is demmy label for testing"; 
label.textColor = [UIColor whiteColor]; 
label.font = [UIFont systemFontOfSize:16]; 
[self.view addSubview:label]; 

//underline code 
CGSize expectedLabelSize = [[m_BCListArray objectAtIndex:tagcount] sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:UILineBreakModeWordWrap]; 

UIView *viewUnderline=[[UIView alloc] init]; 
viewUnderline.frame=CGRectMake((label.frame.size.width - expectedLabelSize.width)/2, expectedLabelSize.height + (label.frame.size.height - expectedLabelSize.height)/2, expectedLabelSize.width, 1); 
viewUnderline.backgroundColor=[UIColor whiteColor]; 
[self.view addSubview:viewUnderline]; 
1

Cóż, zrobił to to samo:

Utwórz niestandardowy przycisk z tekstem: ESPNSoccernet i tło clearColor Dodaj etykietę jako wyrób z wysokością 1 i odrobiną backgrou i kolor tego przycisku, tak aby "ESPNSoccernet" wyglądał na podkreślony. Umieść pozostały tekst na etykiecie obok tego przycisku, aby wyglądał na cały tekst.

Mam nadzieję, że pomoże!

Uwaga: jeśli robisz tylko> iOS 6.0, możesz sprawdzić inne odpowiedzi.

2

w Xcode:

  1. Wybierz etykietę i wybrać inspektora tożsamości.
  2. W tekście wybierz Atrybut zamiast zwykłego.
  3. Teraz Wybierz fragment tekstu, który chcesz podkreślić.
  4. Wybierz czcionkę i wybierz podkreślenie w stylu czcionki.

Proszę.

0

Poniższy fragment kodu produkuje pożądany rezultat:

NSDictionary *dictAttribute = @{NSForegroundColorAttributeName:[UIColor redColor],NSUnderlineStyleAttributeName:@1};   
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@"Please click ESPNSoccernet to read the latest Football News." attributes:dictAttribute]; 

    lblText.attributedText = attrString; 
2

Swift 2.0:

1) Dokonaj nsmutablestring z atrybutem podkreślenia i dodać do tekstu sampleLabel użytkownika.

2) Dodaj gest dotykowego do sampleLabel i powiąż metodę dla dalszego działania.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.") 
    newsString.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue], range: NSMakeRange(4, 4)) 
    sampleLabel.attributedText = newsString.copy() as? NSAttributedString 

    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapResponse:") 
    tapGesture.numberOfTapsRequired = 1 
    sampleLabel.userInteractionEnabled = true 
    sampleLabel.addGestureRecognizer(tapGesture) 

} 
func tapResponse(recognizer: UITapGestureRecognizer) { 
    print("tap") 
}