我在同一视图中有两个NSTableView,它们具有相同的数据源和委托。
两个表视图命名为varTableView和constraintTableView。现在每个行的行数不同,我发现很难实现这两种方法:
-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
-(id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
有没有办法识别tableviews并返回相应的行数?
我的实现是这样的:
-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView{
if([tableView.identifier isEqualToString:@"variableTableView"]){
return [self.arrayOfVariableNames count];
}
else{
return [self.arrayOfConstraintNames count];
}
}
它始终返回约束名称的计数,但不返回变量名称
答案 0 :(得分:3)
你可以通过使用table的名称或table的标签来实现这一点,以了解为哪个表调用特定的委托方法
-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView -(id) tableView: (NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row: (NSInteger)row
{
if (tableView == varTableView)// or check table tag, first you need to set tag for table
{
// do something with varTableView
return ([array1 count]);
}
else if (tableView == constraintTableView)
{
// do something with constraintTableView
return ([array2 count]);
}
}
答案 1 :(得分:2)
是。它是您所包含方法中的tableView
参数。
if (tableView == varTableView)
{
// do something with varTableView
}
else if (tableView == constraintTableView)
{
// do something with constraintTableView
}
行数往往是作为数据源的数组中的对象数。
答案 2 :(得分:1)
如其他答案所示,您可以通过比较其出口来区分两个表格。还有另一种方法,但你必须稍微改变你现有的设计。
不是在一个视图控制器中添加两个表视图,而是为它们创建一个占位符视图。创建两个表视图控制器,并将它们作为子视图添加到这些占位符视图中。通过这种方式,您可以将两个表放在单独的控制器中,它将消除您最终编写的所有if else块。它可能会让你最初放慢脚步,但你会在以后受益。