【问题标题】:view-based NSTableView's views from XIB?来自 XIB 的基于视图的 NSTableView 的视图?
【发布时间】:2012-05-09 01:38:34
【问题描述】:

是否可以为基于视图的NSTableViewNSTableCellView 提供单独的 XIB 文件?也许在NSViewController 的帮助下?

【问题讨论】:

    标签: cocoa nstableview nsviewcontroller


    【解决方案1】:

    是的,这似乎是可能的。

    来自 Apple 的文档:

    为了发挥作用,以编程方式实现的基于视图的表必须实现以下功能:

    ...

    由 NSTableViewDelegate 协议定义的 - (NSView *)tableView:viewForTableColumn:row: 方法。此方法既为表格提供视图以显示为特定列和行的单元格,又为该单元格填充适当的数据。

    这样,您可以拥有 NSView 类(或任何子类)的对象,并在正确填充数据后将其返回。你从哪里得到这个对象,并不感兴趣。据我所知,可以执行以下操作,例如:

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
        // Assume you have a XIB called View.xib
        [NSBundle loadNibNamed:@"View" owner:self];
        
        // And you have an IBOutlet to your NSTableView (that's view based) called tView
        [tView reloadData];
    }
    
    - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
         return 20;
    }
    
    - (NSView *)tableView:(NSTableView *)tableView
       viewForTableColumn:(NSTableColumn *)tableColumn
                      row:(NSInteger)row {
    
    
        // Assume your class has an IBOutlet called contentOfTableView, 
        // your class is File's Owner of the View.xib and you connected the outlet.
        return contentOfTableView;
    
    }
    

    希望它有效。我只是把它放在一起,心里有个粗略的想法。祝你好运!

    【讨论】:

    • 谢谢!那么 contentOfTableView 是一些 NSView 吗?视图如何知道要加载哪个 NIB?
    • 如果您将控制器类设置为 View.xib 中的文件所有者,然后使用:loadNibNamed 您正在加载 nib 本身。通过将 self 指定为所有者(NSBundle 的比较方法),您告诉 Cocoa 占位符应该 - 是的 - 由您的控制器对象替换。在 View.xib 中,您将 IBOutlet contentOfTableView 连接到文件所有者。在您的 xib 加载到内存后,这就是您的控制器。所以你可以完全使用这个出口,就像你在同一个 xib 中声明它是一个普通的出口一样。
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多