xib中两个NSTableView能否分别采用代码填充与IB绑定方式?
解决方案:混合代码填充NSTableViewA与绑定填充NSTableViewB
问题根源:当两个NSTableView的代理指向同一个对象(File's owner)时,代理方法会被两个表格触发。如果不对表格实例做区分,
tableView:viewForTableColumn:row:会给表格B也返回代码创建的视图,直接覆盖绑定内容。解决步骤:
给两个表格分别添加IBOutlet引用,在File's owner的类文件里声明:
@property (weak) IBOutlet NSTableView *tableViewA; @property (weak) IBOutlet NSTableView *tableViewB;回到IB,把对应的表格拖到这些IBOutlet上完成关联。
在代理方法中区分表格实例,只处理表格A的请求:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { if (tableView == self.tableViewA) { // 这里写表格A的视图创建与赋值逻辑 NSTableCellView *cell = [tableView makeViewWithIdentifier:@"ACellIdentifier" owner:self]; cell.textField.stringValue = self.tableAData[row]; return cell; } // 表格B返回nil,让绑定机制自行处理视图渲染 return nil; }同步处理行数代理方法(如果实现了的话):
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { if (tableView == self.tableViewA) { return self.tableAData.count; } // 表格B的行数由绑定的数据源控制,返回0即可 return 0; }
额外注意:确保表格B的绑定配置正确,比如已经将其内容绑定到数组控制器或数据源属性,且表格的布局模式(基于单元格/基于视图)与绑定设置匹配。
内容的提问来源于stack exchange,提问作者CocoaNut
相关产品推荐
相关产品推荐

