2011-11-24 82 views
1

我想創建一個UITableViewCell,在左邊有兩個藍色文本「TextLabels」,右邊是兩個黑色的「DetailTextLabels」,風格類似於儘可能使用UITableViewCellStyleValue2。自定義UITableViewCell的樣式看起來非常像UITableViewCellStyleValue2

到目前爲止,我已經將TextLabel和DetailTextLabel文本設置爲非常長的東西(以便它將佔用分配給藍色標籤的整個寬度),將字體設置爲UIColor.Clear,然後每次渲染時都會進行測量。這有很多原因是可怕的,但它的工作方式。

我想用一個自定義的UIView和一個自定義的Draw方法來實現這一點。這是一個更漂亮的解決方案,但現在我缺少一個重要的信息:用於顯示TextLabel的區域的寬度。我可以對它進行硬編碼,這似乎是在iOS上執行操作的可接受方式(即使它讓我感覺髒),但是我必須在水平和垂直方向上對iPad和iPhone進行硬編碼。然後,只要我的UITableView是簡單的而不是分組,或者其他的,它可能會中斷。

我在哪裏可以得到這個愚蠢的標籤區域的標準寬度?

謝謝!

+0

您是否嘗試過cell.frame.size.width? –

+0

@AlanZeino會給我的單元格的寬度,而不是分配給藍色標籤的區域的寬度。 –

+0

我認爲你可能會接近這個反向 - 你想要的是從單元格左右邊緣的標準插入,硬編碼這些並將你的標籤設置爲自動大小(靈活寬度),這將覆蓋你的肖像,風景, iPad等等。我不確定爲什麼要使用自定義視圖並手動繪製而不是將標籤添加爲子視圖? – jrturton

回答

1

每個UITableViewCell有一個textLabel和一個detailTextLabel。在UITableViewCellStyleValue2上,textLabel位於左側,而detailTextLabel位於右側。因此,你可以訪問左側的標籤的面積是這樣的:

cell.textLabel.frame 

,您可以訪問正確的標籤的地區,像這樣:

cell.detailTextLabel.frame 
+0

這是正確的,但它們根據其內容具有不同的寬度。我希望能有一個不變的或者可以查詢的屬性,而不必在提供的文本標籤中設置僞造的內容,隱藏它們等等。我已經有了這種方法來拍打,但是我認爲有一種簡單的控制簡單屬性查詢的更簡單的方法。 –

1

你有沒有想過做在Interface Builder中的細胞,並用靜態UINib來加載它?這對我來說似乎足夠快,但我還沒有測試任何比3GS慢的東西。

如果它對於你的應用來說足夠快,我強烈推薦它,你將能夠在未來以更少的努力進行小(和大!)的調整。

0

只是子類UIView,並在您的drawRect內執行以下操作。

- (void) drawRect:(CGRect)rect { 
    NSString *label = @"Label 1"; 
    CGSize size = [label sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] 
        constrainedToSize:CGSizeMake(self.frame.size.width, 100.0f) 
        lineBreakMode:UILineBreakModeCharacterWrap]; 

    [label drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height) withFont:[UIFont boldSystemFontOfSize:12.0f]]; 

    [super drawRect:rect]; 
}