2013-05-06 41 views
11

Tôi chỉ muốn tô sáng văn bản trong UILabel, tôi đã thử bằng cách cho backgroundColor cho nhãn, nhưng nó làm nổi bật không gian trống cũng có vẻ không tốt. Vì vậy, có cách nào để đánh dấu văn bản mà không thay đổi kích thước UILabel.Cách chỉ đánh dấu văn bản trong UILabel - IOS

Vui lòng kiểm tra hình ảnh, đây là nhãn lớn hơn văn bản (liên kết trung tâm)

enter image description here

Thanx.

+0

Bạn sẽ phải sử dụng một 'NSAttributedString'. –

+0

@MikeWeller Bạn có thể cung cấp thêm chi tiết ... – Newbee

+0

Tôi nghĩ bạn muốn nền tảng rõ ràng. thiết lập label.backgroundColor = [UIColor clearColor]; Label.highlightedTextColor = [UIColor greenColor]; – Ashini

Trả lời

22

Hầu hết các giải pháp khác không xem xét văn bản mà kéo dài nhiều dòng trong khi vẫn chỉ làm nổi bật văn bản, và tất cả chúng đều khá hacky liên quan đến các bản phụ.

Một iOS 6 và sau đó giải pháp là sử dụng dây do:

NSMutableAttributedString *s = 
    [[NSMutableAttributedString alloc] initWithString:yourString]; 

[s addAttribute:NSBackgroundColorAttributeName 
      value:[UIColor greenColor] 
      range:NSMakeRange(0, s.length)]; 

label.attributedText = s; 
+0

Tôi không có ý tưởng về NSMutableAttributedString được nêu ra, dù sao làm việc tốt của nó. cảm ơn. – Newbee

+3

Tôi đã thử quy trình trên. Nó không hoạt động tốt với tôi.: | http://i.imgur.com/XhuVL9q.png?1 –

+0

Điều này không hoạt động như mong đợi bởi câu hỏi: nó cũng thêm màu nền cho các khoảng trống được tạo bởi gói từ. Kiểm tra: [Chỉ đánh dấu văn bản trong một nhãn UILabel] (http://stackoverflow.com/questions/31293873/highlight-just-the-text-in-a-uilabel?rq=1) – Damasio

1

thử này

MTLabel

MTLabel *label4 = [MTLabel labelWithFrame:CGRectMake(20, 270, 250, 60) 
            andText:@"This label is highlighted, has a custom line height, and adjusts font size to fit inside the label."]; 
     [label4 setLineHeight:22]; 
     [label4 setFont:[UIFont fontWithName:@"Helvetica" size:30]]; 
     [label4 setAdjustSizeToFit:YES]; 
     [label4 setMinimumFontSize:15]; 
     [label4 setFontHighlightColor:[[UIColor orangeColor] colorWithAlphaComponent:0.5]]; 
     [self.view addSubview:label4]; 
-3

Bạn có thể có một UIImageView, thiết lập màu nền của sự lựa chọn của bạn sau đó đặt bạn UILabel trên đó. Điều đó chắc chắn sẽ giải quyết được vấn đề của bạn. Đây là mã Cách giải quyết:

UIImageView * imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 40)]; 
[imgView setBackgroundColor:[UIColor brownColor]]; 
[self.view addSubview:imgView]; 


UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)]; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setTextAlignment:UITextAlignmentCenter]; 
label.text = @"My Label"; 
[imgView addSubview:label]; 


[label release]; 
[imgView release]; 

Bạn cũng có thể đạt được cùng sử dụng Interface Builder.

+0

Hình nền cũng sẽ bao gồm toàn bộ nhãn UI ... – Newbee

+0

Vui lòng kiểm tra câu trả lời đã chỉnh sửa của tôi –

+0

Vui lòng đề cập đến lý do bỏ phiếu xuống !! Vì vậy, tôi có thể sửa câu trả lời của tôi. –

3

này sẽ thêm một subview phía sau văn bản, với kích thước chính xác:

CGSize size= [[label text] sizeWithFont:[UIFont systemFontOfSize:18.0]]; 
NSLog(@"%.1f | %.1f", size.width, size.height); 
NSLog(@"%.1f | %.1f", label.frame.size.width, label.frame.size.height); 

UIView *highlightView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
[highlightView setBackgroundColor:[UIColor greenColor]]; 
[self.view insertSubview:highlightView belowSubview:label]; 
[highlightView setCenter:label.center]; 

Và đừng quên: [label setBackgroundColor:[UIColor clearColor]];

+3

Điều này sẽ không hoạt động chính xác nếu văn bản đang bao quanh nhiều dòng. Chế độ xem màu xanh lá cây này chỉ có thể tạo thành các hình chữ nhật đơn. Nếu dòng thứ hai chỉ có 1 từ, toàn bộ dòng sẽ được đánh dấu. –

+0

Đúng vậy, nhưng nếu bạn phải hỗ trợ bất kỳ iOS <6 và không thể sử dụng 'NSMutableAttributedString', thì đây có thể là giải pháp đơn giản nhất. – xapslock

Các vấn đề liên quan