单个视图中的两个NSTableView

时间:2014-10-15 04:13:37

标签: objective-c cocoa nstableview appkit

我在同一视图中有两个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];
    }
}

它始终返回约束名称的计数,但不返回变量名称

3 个答案:

答案 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块。它可能会让你最初放慢脚步,但你会在以后受益。