【问题标题】:Create a custom cell in a NSTableView在 NSTableView 中创建自定义单元格
【发布时间】:2015-03-22 15:53:42
【问题描述】:

在我的应用中,我正在尝试创建一个自定义单元格,如下所示:

我知道如何在 iOS 上做到这一点,我猜在使用 OS X 时应该是完全一样的。 因此,在界面生成器中,我设计了表格视图,但我可以弄清楚如何创建自定义单元格。我试图在我设计表格视图的 .xib 中插入我需要的自定义组件(2 NSTextField 和 2 NSImageView),然后创建一个类 "CustomCell.m""CustomCell.h" 作为 NSTableCellView 的子类,所以我试图将我的组件连接到这个类,但我无法添加它......为什么我不能将组件连接到“CustomCell”类?怎么了?你能帮我找到一种方法来做到这一点(也许也是一个教程)?

为此,我只是按照我现在为 iOS 创建自定义表格单元格的方法

【问题讨论】:

    标签: objective-c macos cocoa nstableview


    【解决方案1】:
    1. 在 Xib 中,添加一个 NSTableView 并确保 contentType 在 Attributes Inspector 窗格中为 View Based。
    2. Table列包含一个TableCellview,默认包含一个TableViewCell。移除 TableViewCell。
    3. 根据需要将 NSTextFields 和 ImageViews 拖到 TableCellview 中。 默认情况下,NSTableCellview 支持 1 个 Imageview 和 1 个 Textfield。如果你需要两个,继承 NSTableCellview 并为你的组件创建 IBOutlet 属性,并将 IB 中的 NSTableCellview 类更改为 InheritedTableCellview。

      @interface InheritedTableCellview : NSTableCellView
      
      @property (assign) IBOutlet NSTextField *secondTextField;
      @property (assign) IBOutlet NSImageView *secondImageView;
      
      @end
      
      @implementation SRITableCellView
      
      @end
      
    4. 用唯一的字符串命名TableCellview的标识符。

    5. 将 Imageview 和 Textfield 出口组件连接到 TableCellview。
    6. 连接 tableview 数据源并委托给 viewController。

    在视图控制器中,实现下面的数据源方法来显示所需的行数。

    - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
        return self.tableArray.count;
    }
    

    实现委托方法为每一行设置图像和文本,

    - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
    {
        InheritedTableCellview *cellView = [tableView makeViewWithIdentifier:@"MainCell" owner:self];
        cellView.backgroundStyle = NSBackgroundStyleDark;
        cellView.textField.stringValue = self.tableArray[row][@"textValue1"];
        cellView.imageView.image = [NSImage imageNamed:self.tableArray[row][@"image1"]];
        cellView.secondTextField.stringValue = self.tableArray[row][@"textValue2"];
        cellView.secondImageView.image = [NSImage imageNamed:self.tableArray[row][@"image2"]];
    
        return cellView;
    }
    

    【讨论】:

    • 你做了一个非常好的教程,非常感谢你:我用你的回答解决了我的问题
    【解决方案2】:

    在您的 xib 中,选择您要连接的自定义单元,然后转到右侧面板 (https://developer.apple.com/library/ios/recipes/xcode_help-general/Chapters/AbouttheUtilityArea.html) 实用程序区域中的身份检查器。将类更改为 CustomCell 类型。然后你应该能够将它连接到插座

    【讨论】:

      【解决方案3】:

      Apple 不鼓励使用 Lion 的 NSCell 子类。你现在可以做一个基于 NSView 的 NSTableView,它更加灵活。

      我已经通过在 dataSource 方法中创建 NSViews 来完成它们,但是 here's 使用 nib 完成它是一个不错的选择。

      也见apple docs

      【讨论】:

      • 苹果不鼓励使用 NSCell 的来源?
      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多