2011-09-20 176 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。 –

相关问题