NSTableView ViewBased从不调用所需的委托

时间:2018-02-09 15:15:20

标签: objective-c macos nstableview

我有一个NSTableView,我想显示一个信息列表。 目前,viewForTableColumn方法委托永远不会运行,但numberOfRowsInTableView会运行。

我在ViewController头中设置了NSTableViewDelegate和NSTableViewDataSource。我将tableview委托和数据源设置为self。有人知道为什么它不会运行吗?我在下面添加了屏幕截图和代码。

ViewController.h

@interface ViewController : NSViewController <NSTableViewDelegate, NSTableViewDataSource>

@property (strong) IBOutlet NSTableView *tableView;
@property (strong, nonatomic) NSMutableArray<App *> *installedApps;

@end

ViewController.m

 - (void)viewDidLoad {
    [super viewDidLoad];

    _installedApps = [[NSMutableArray alloc] init];

    _tableView.dataSource = self;
    _tableView.delegate = self;

    // Other stuff that populates the array
}

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

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTableCellView *result = [tableView makeViewWithIdentifier:@"appCell" owner:self];
    result.textField.stringValue = @"Hello world";

    return result;
}

视图位于容器视图中,我有一个appCell&#39;标识符设置为表格单元格视图。

Screenshot of my storyboard

3 个答案:

答案 0 :(得分:0)

数组_installedApps为空,numberOfRowsInTableView:返回0.因此,未调用tableView:viewForTableColumn:,因为没有要显示的行。没有行也意味着没有列。

您还应确保在表格视图的属性检查器中将表格视图配置为基于视图

答案 1 :(得分:0)

我无法在屏幕截图中看到它,但是...是带有appCell标识符的视图层次结构(表格单元格视图)的突出显示的行?

[会议通过......]

糟糕;抱歉。我看到你已经注意到了上述情况。

我问的原因是我从你的代码中创建了一个新项目,将数组类型从App更改为NSString,向故事板添加了一列表视图,将其链接到代码,添加了一些内容到在-viewDidLoad中的数组,并且 - 一旦我将appCell标识符放在正确的位置(duh) - 它一切正常。

答案 2 :(得分:0)

这很奇怪,但是我遇到了同样的问题,一切都正确连接,调用了行数,但没有viewForTableColumn ...最终,以下答案被证明是解决方案:

https://stackoverflow.com/a/13091436/3963806

基本上,我已经直接在对象库中设置了tableview,没有布局约束等。一旦添加了布局约束,该方法就开始被调用。。。行”,但未正确填充...我认为这是由于链接答案中提到的剪切所致。