在NSTableView中创建自定义单元格

时间:2015-01-23 15:08:39

标签: objective-c macos cocoa nstableview

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

enter image description here

我知道如何使用iOS进行操作,我想使用OS X应该完全相同。 所以在界面构建器中我设计了表视图,但我可以想出如何创建自定义单元格。我试图在.xib中插入我设计表视图我需要的自定义组件(2 NSTextField和2 NSImageView),然后创建一个类"CustomCell.m"和{{1 }}作为"CustomCell.h"的子类,所以我尝试将我的组件连接到此类,但我无法添加它...为什么我无法将组件连接到" CustomCell& #34;类?怎么了?你能帮我找到一种方法吗(也许是教程)?

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

3 个答案:

答案 0 :(得分:35)

  1. 在Xib中,添加NSTableView并确保在Attributes Inspector窗格中contentType为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 Datasource和委托连接到viewController。
  7. 在视图控制器中,实现以下数据源方法以显示所需的行数。

    - (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;
    }
    

答案 1 :(得分:1)

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

答案 2 :(得分:1)

Apple不鼓励使用Lion的NSCell子类。您现在可以执行基于NSView的NSTableView,它更加灵活。

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

另见apple docs