我一直在尝试在实用程序应用程序中有两个表,但我遇到了问题;当我创建两个委托和两个数据源时,我收到一个错误。有没有办法在一个类中创建多个委托?
答案 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
的UILabeltableIdentifier.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`
}
希望这有帮助