2010-03-11 66 views
3

嘗試實現類似於內置聯繫人iPhone應用程序的名稱的UITableView,其中第一個名稱爲普通字體,姓氏爲粗體。快速谷歌表明,這不像聽起來那麼容易,因爲iPhone SDK缺乏UILabels中豐富的文本支持。具有部分粗體文本的自定義UITableViewCell

其中一個解決方案發現建議使用UIWebView來格式化允許HTML粗體標記以提供所需標記的文本。糾正我,如果我錯了,但這似乎是矯枉過正,並會影響應用程序的性能。

我試圖調查更多的另一個解決方案是創建一個自定義UITableViewCell包含兩個UILabels並排與第二個標籤格式爲粗體文本。這看起來很簡單,但我不確定如何水平標註自動大小以適應文本(達到某個最大寬度)。這可能通過Interface Builder實現嗎?還是需要通過編程來完成?

我在這裏的正確軌道上還是有更簡單的方法來實現這個看似微不足道的效果?

+0

你說得對有關的UIWebView ..試過這種與下標和上標文本,類似的問題。不幸的是,我的解決方案不適合你。祝你好運。 http://www.cannonade.net/blog.php?id=1467 – RedBlueThing 2010-03-11 00:35:54

回答

1

我不知道你是否應該繼承UILabel並自己做繪圖。然後你可以使用CGContextSelectFont,CGContextGetTextPosition,CGContextSetTextPosition, CGContextShowText等來繪製你的文字。

選擇正常字體,設置初始文本位置,繪製文本,將文本位置提前幾個像素,選擇粗體字體,繪製粗體文本等等。

我自己以前沒有這樣做過,但我正在考慮爲我的一個應用程序使用此解決方案。

+0

這是蘋果如何做到這一點(雖然我認爲他們使用更高級別的'UIStringDrawing'方法) – rpetrich 2010-03-11 01:37:56

+0

我結束了這樣做(與UIStringDrawing方法),並推出了我自己的輕量級RichTextLabel,允許使用HTML標記定義粗體,斜體和帶下劃線的文本。我在下面提到的TTStyledTextLabel解決方案與Three20框架緊密耦合,這對我所需要的是過度的。 – 2010-03-12 00:11:58

0

它看起來像這樣已被問及在堆棧溢出下的各種僞裝下的fewtimes。一個常見的解決方案似乎是Three20庫的TTStyledTextLabel。在iPhone SDK包含一個內置豐富文本標籤並且缺少自己的滾動功能之前,這個類看起來是下一個最好的東西。

編輯:只是碰到這種解決方案來了,它看起來甚至更好:https://github.com/chrisdevereux/Slash

0
enter code here NSDictionary *firstNameAttributes = @{ NSFontAttributeName : [UIFont fontWithName:@"Arial" size:20.0], 
              NSStrokeColorAttributeName : [UIColor blackColor]}; 
    NSDictionary *lastNameAttributes = @{NSFontAttributeName : [UIFont fontWithName:@"Arial-Bold" size:20.0], 
              NSStrokeColorAttributeName : [UIColor blackColor]}; 
    NSString* first = @"udhaya"; 
    NSString* last = @" chandrika"; 


    NSString *append=[NSString stringWithFormat:@"%@%@",first,last]; 

    cell.textLabel.text = [NSString stringWithFormat:@"%@",append]; 

    NSMutableAttributedString * name = 
    [[NSMutableAttributedString alloc] initWithString:first attributes:firstNameAttributes]; 
    NSMutableAttributedString * lastName = 
    [[NSMutableAttributedString alloc] initWithString:last attributes:lastNameAttributes]; 

    [name appendAttributedString:lastName]; 

    [[cell textLabel] setAttributedText:name];