如何在实用程序应用程序中创建两个表视图?

时间:2011-03-18 03:23:23

标签: iphone objective-c cocoa-touch uitableview

我一直在尝试在实用程序应用程序中有两个表,但我遇到了问题;当我创建两个委托和两个数据源时,我收到一个错误。有没有办法在一个类中创建多个委托?

2 个答案:

答案 0 :(得分:1)

保持Delegate和datasource函数的单次出现。

只需使用以下方法并放入每个功能的开头(Just Sample)。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
        if(myTableOne == tableView)  
        {
            return 5;
        }
        else if(myTableSecond == tableView)
       {
          return 10;
       }
}

答案 1 :(得分:0)

实际上你不能在同一个视图控制器中为两个表放两个委托和两个datsource。

您可以使用标志或隐藏的UILabel来设置唯一值,并根据标记或标签的值访问数据源和委托。

例如:

如果我有2个表,一个用于购买,另一个用于销售

我将设置名为say tableIdentifier

的UILabel
tableIdentifier.text = @"Buy";

当我想加载购买

并类似地设置

tableIdentifier.text = @"Sale";

当我想加载销售

就数据源和委托方法而言,现在就是这样:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     int rows = 0;
      if([tableIdentifier.text isEqualToString:@"Buy"])
      {
          rows = //Your row count for Buy;
      }
      else if([tableIdentifier.text isEqualToString:@"Sale"])
      {
           rows = //Your row count for Sale;
      }

     return rows;
 }

类似地,它适用于基于label或flag值的每个委托和数据源方法。

注意:

如果您使用上面显示的标签,则需要outlet标记为XIB中的隐藏标签和@synthesize标签,否则其值将返回null,如果价值不保留。

希望这有助于你

修改

在这种情况下,您可以在[plist1Array count] + [plist2Array count]方法

中将计数设为numberOfRowsInSection:

cellForRowAtIndexPath:方法中,您可以检查indexPath.row并根据该

加载数据
if(indexPath.row <=[plist1Array count])
{
     //Load data in cell.textLabel.text From `plist1Array`
}
else if(indexPath.row >[plist1Array count] && indexPath.row <[plist2Array count])
{
    //Load data in cell.textLabel.text From `plist2Array`
}

修改-1:

如果你想要,你可以在同一张表的不同部分显示它们,而不是在两个不同的表格中显示它们,如

numberOfRowsInSection:方法

 int j = 0;
 if(indexPath.section == 0)
 {
      j=[plist1Array count];
 }
 else if(indexPath.section == 1) 
 {
      j=[plist2Array count];
 }
 return j;

cellForRowAtIndexPath:方法

if(indexPath.section == 0)
{
     //Load data in cell.textLabel.text From `plist1Array`
}
else if(indexPath.section == 1) 
{
    //Load data in cell.textLabel.text From `plist2Array`
}

希望这有帮助