2012-03-12 34 views
6

Tôi cố gắng để làm cho nhiều lần xuất hiện trong một chuỗi gán đậm sử dụng giống như sauVề AttributeString - làm cho nhiều lần xuất hiện đậm

[attrStr setFont:[UIFont ...] range:[attrStr.string rangeOfString:@"hello world"]]; 

Như bạn đã biết, 'rangeOfString' luôn trả lại xảy ra FIRST của trận đấu. .. Tôi vẫn còn khá mới cho iOS, chỉ cần tự hỏi cách tốt nhất để thiết lập tất cả các lần xuất hiện để in đậm ... Có chức năng nào được cung cấp trong NSString hay gì đó không?

Cảm ơn trước!

+0

Không có phản hồi từ áp phích gốc về kết quả. – wuf810

Trả lời

22

Trước tiên, bạn nên cố gắng lấy tất cả các dải ô trong chuỗi và sau đó đặt thuộc tính cho mọi phạm vi. Có một số ví dụ mã lớn ngay tại đây trên stackoverflow: https://stackoverflow.com/a/4653266/381870

Edit:

Dưới đây là một ví dụ cho bạn

- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str { 
    NSMutableArray *results = [NSMutableArray array]; 
    NSRange searchRange = NSMakeRange(0, [str length]); 
    NSRange range; 
    while ((range = [str rangeOfString:searchString options:0 range:searchRange]).location != NSNotFound) { 
     [results addObject:[NSValue valueWithRange:range]]; 
     searchRange = NSMakeRange(NSMaxRange(range), [str length] - NSMaxRange(range)); 
    } 
    return results; 
} 

Cách sử dụng:

NSArray *results = [self rangesOfString:@"foo" inString:@"foo bar foo"]; 
NSLog(@"%@", results); 

mang đến cho bạn

(
    "NSRange: {0, 3}", 
    "NSRange: {8, 3}" 
) 
+0

Cảm ơn. Mã siêu tuyệt vời (y) – ishhhh

+0

câu trả lời xuất sắc..save ngày của tôi –

0

Bạn sẽ thích sử dụng NSScanner để quét qua văn bản và thay thế nó.Bạn có thể tìm thấy một ví dụ cho NSScanner here.

+0

Cảm ơn bạn @Vignesh để biết thông tin. Tôi sẽ xem xét tùy chọn này ... Tôi đã chọn giải pháp trên vì nó phù hợp hơn với codebase hiện tại của tôi. :) – Koolala

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