2011-09-20 173 views
2

我有一個NSTableView從窗口邊緣延伸到邊緣,但表格邊緣的單元格中的數據確實需要一些填充。如果我在邊緣留下一個排水溝,那麼窗口看起來不太好,所以我想嘗試在一些單元格內添加一些填充,這樣數據就不會對齊邊緣。如何將NSTableView單元格添加到單元格的填充?

我在界面生成器或代碼文檔中找不到任何有關向單元添加填充或插入的任何內容。

有什麼建議嗎?

回答

4

你也可以繼承NSTextFieldCell並覆蓋drawInteriorWithFrame:inView:方法來定義繪製的字符串。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    NSRect titleRect = [self titleRectForBounds:cellFrame]; 
    NSAttributedString *aTitle = [self attributedStringValue]; 
    if ([aTitle length] > 0) { 
     [aTitle drawInRect:titleRect]; 
    } 
} 

其中titleRectForBounds:增加了一些空間

- (NSRect)titleRectForBounds:(NSRect)bounds 
{ 
    NSRect titleRect = bounds; 

    titleRect.origin.x += 5; 
    titleRect.origin.y += 5; 

    NSAttributedString *title = [self attributedStringValue]; 
    if (title) { 
     titleRect.size = [title size]; 
    } else { 
     titleRect.size = NSZeroSize; 
    } 

    // We don't want the width of the string going outside the cell's bounds 
    CGFloat maxX = NSMaxX(bounds); 
    CGFloat maxWidth = maxX - NSMinX(titleRect); 
    if (maxWidth < 0) { 
     maxWidth = 0; 
    } 

    titleRect.size.width = MIN(NSWidth(titleRect), maxWidth); 

    return titleRect; 
} 

有在http://comelearncocoawithme.blogspot.com/2011/09/custom-cells-in-nstableview-part-1.html

+1

感謝您的非常完整的答案。我發現它真的令人沮喪,儘管桌面Cocoa的每個問題的答案都是「它不這樣做,你需要重寫子類中的方法」。 iOS/Cocoa Touch如何比桌面Cocoa更成熟? –

+0

我認爲Cocoa Touch已經完成,因此它不如Cocoa通用,在控件上放置更多的預定義行爲和策略,以便獲得更一致的體驗。另一方面,可可,試圖成爲一個更通用的工具包有一些東西,儘管可能,你需要爲它編寫更多的代碼。 – iain

+1

您還需要記住,NSTableView很可能是在10年前寫的,所以需求和UI需求在那段時間內都發生了變化。我懷疑這就是爲什麼Lion現在有能力將自定義的NSView作爲單元格。至少在Cocoa中,當你需要重寫一個行爲時,通常這是一件很簡單的事情 – iain

0

簡單方法:在文本字符串前添加空格。 更好的方法:在你的單元格內嵌入一個視圖,並將其中的所有其他UI對象。

+1

添加空間更完整的例子是我想的第一件事。 NSTableView似乎會修剪字符串,在實際顯示之前刪除所有前導和尾隨空格,因爲如果我添加@「」,它不會顯示,但是如果我添加@「_」,它會顯示。 –

+0

我已經成功地使用了類似「文本」的內容,所以在文本工作之前猜測空間?順便說一句,這些提示是簡單的情況。對於更復雜的佈局,我使用Interface Builder創建了一個XIB,並基於此創建了一個單元。更容易進行佈局更改。對不起,我忘了這件事,昨晚已晚。 – JOM

-1

在你的cellforrowAtIndexPath你需要實現這個。

cell.textLabel.text = [NSString stringWithFormat:@「%@」,sometext];

否則 採取標籤和SETFRAME到it.Then它添加到細胞

+0

添加空格是我嘗試的第一件事。 NSTableView似乎會修剪字符串,在實際顯示之前刪除所有前導和尾隨空格,因爲如果我添加@「」,它不會顯示,但是如果我添加@「_」,它會顯示。 –

+0

另外,我正在處理NSTableView,而不是UITableView。這是桌面可可,而不是iPhone上的Cocoa Touch。 –

相關問題