2013-05-13 5 views
5

Мне нужно подчеркнуть определенную часть UILabel, как предлагает название. Например: Please click ESPNSoccernet to read the latest Football News. Я хотел бы подчеркнуть слово ESPNSoccernet. Это потому, что я хочу, чтобы он был кликабельным, и ему нужно связать сайт.Подчеркивание определенной части UILabel

Нужно руководствоваться этим. Если есть другой путь, скажи мне ...

+1

Используйте для этого строку html. И покажите в пользовательской метке, которая поддерживает атрибутные строки. – Divyu

+0

может показать мне пример ... – lakesh

+0

Вы можете попробовать http://stackoverflow.com/questions/7385892/how-can-i-set-substring-of-a-nsstring-as-bold-in-uilabel –

ответ

14

для IOS 6, вы можете использовать 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]; 

вы также можете использовать третью партию UILable библиотеки TTTAttributedLabel.

1

UILabel способен только отображать простых текстовых строк (в IOS 6 он теперь может также отображать NSAttributedString с, но это не будет работать в старых версиях IOS, так что лучше не полагаться на это), так что вы не сможет сделать это с помощью метки.

Вы можете посмотреть TTTAttributedLabel для отображения отнесенного текста (чтобы вы могли добавлять подчеркивания и другое форматирование), но вы не сможете добавлять гиперссылки с этим классом.

вариантов у вас есть для интерактивного сегмента строки в основном:

  1. Используй простой UILabel и наложение UIButton по той части, которую вы хотите быть интерактивными, или

  2. Использования TTTAttributedLabel для достижения эффекта подчеркивания и UITapGestureRecognizer для обнаружения и обработки кранов (обратите внимание, что это будет захватывать краны на этикетке всего, а не только подчеркнутой части).

Для 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]; 

Для более ранних версий IOS, а также 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]; 

Затем добавить жест распознавани и реализации handleTap::

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

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

в iOS 6.0 UILabel поддерживает NSAttributedString – Bonnie

+0

@Bonnie да, но большинство разработчиков не могут позволить себе не поддерживать iOS 5 на данный момент, поэтому лучше использовать то, что работает и для более старых версий программного обеспечения. – Greg

+0

Я просто взглянул на TTTAttributed Label. Кажется, что они разрешают ссылки .. – lakesh

-2

Вы можете использовать UIWebView и вставьте некоторый код HTML для его желаемого форматирования. HTML также включает в себя бонус возможности гиперссылки, хотя веб-страница будет содержаться внутри самого веб-представления.

EDIT: этот метод будет работать от iOS 2.0 и более поздних версий, поэтому на старых устройствах проблем не возникнет.

Для этого добавьте UIWebView в нужное место и создайте для него выход (в демонстрационных целях я назову мин webView).

В методе viewDidLoad добавить:

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

Надеется, что это помогает ...

+0

Другими словами, вы предлагаете, чтобы гиперссылка была открыта встроенным в крошечный веб-просмотр с однострочным текстовым размером, что, безусловно, не очень хорошее решение. – Greg

+0

Кроме того, использование веб-представления для отображения одной строки текста является чрезмерным и содержит много лишних накладных расходов, когда это можно сделать гораздо проще. – Greg

+0

Я не предлагал, чтобы это было «совершенно приемлемо» – Hacker

0

Если это приложение для IOS 6 или более поздней версии в этом случае вы можете использовать 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; 

за меньшие версии вы можете использовать, как это ..

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

Ну, я бы сделал то же самое вот так:

Создайте пользовательскую кнопку с текстом: ESPNSoccernet и фон clearColor Добавьте метку в качестве подзаголовка с высотой 1 и некоторой backgrou nd для этой кнопки, так что «ESPNSoccernet» выглядит подчеркнутым. Поместите оставшийся текст в ярлык рядом с этой кнопкой, чтобы он выглядел как целый текст.

Надеюсь, это поможет!

Примечание: если вы выполняете только> iOS 6.0, вы можете проверить другие ответы.

2

В Xcode:

  1. Выберите метку и выберите инспектор, удостоверяющий личность.
  2. В тексте выберите Attributed вместо plain.
  3. Теперь выберите часть текста, которую вы хотите подчеркнуть.
  4. Выберите шрифт и выберите подчеркивание в стиле шрифтов.

Там вы идете.

0

Следующий фрагмент кода производит желаемый результат:

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) Сделать NSMutableString с подчеркнутой атрибут и добавить к тексту sampleLabel в.

2) Добавьте жест выделения к sampleLabel и свяжите метод для дальнейших действий.

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") 
} 
Смежные вопросы