我在同一个类中有两个表,我需要每个表包含不同的数据,但我在委托方面有问题...如何使每个表包含一个单独的委托?谢谢,抱歉我的英文。
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1; }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [dataTable1 count];
}
-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CeldaFamilia *cell = (CeldaFamilia *)[aTableView dequeueReusableCellWithIdentifier:@"CeldaFamilia"];
if (!cell) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CeldaFamilia" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.propTextFamilia.text =[dataTable1 objectAtIndex:indexPath.row];
return cell;
}
答案 0 :(得分:3)
您可以通过查看传入的tableView
参数来执行此操作。示例:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.tableView1) {
return [dataTable1 count];
} else /* tableView == self.tableView2 */ {
return [dataTable2 count];
}
}
使用此模式,您需要在所有if
和UITableViewDataSource
方法中添加UITableViewDelegate
个语句。
另一种方法是创建一个返回表视图数据数组的方法:
- (NSArray *)dataTableForTableView:(UITableView *)tableView {
if (tableView == self.tableView1) {
return dataTable1;
} else /* tableView == self.tableView2 */ {
return dataTable2;
}
}
然后在每个数据源/委托方法中使用该函数。例如:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self dataTableForTableView:tableView] count];
}
您的tableView:cellForRowAtIndexPath:
方法可能仍需要if
语句,具体取决于每个表的数据。
但是,我建议您不要使用其中任何一种模式。如果为每个表视图创建单独的数据源/委托,则代码将更好地组织并更易于理解。您可以使用同一个类的两个实例,也可以根据需要使用两个不同的类并使用每个类的一个实例。
答案 1 :(得分:2)
如果将每个tableView的标记设置为不同的数字,则可以使用它来区分它们。
例如,您可以
tableView1.tag = 1;
tableView2.tag = 2;
然后在您的delegate和dataSource方法中,您可以执行以下操作:
if (tableView.tag == 1) {
//first table data
}
else if (tableView.tag == 2) {
//second table data
}
答案 2 :(得分:-1)
您可以为第二个表(secondTable)添加其他类,并在其中实现数据源和委托表视图协议。在您的视图控制器中,它包含viewDidLoad中的2个表: SecondTable * second = [SecondTable alloc] init]; second.delegate =自我; second.datasource =秒;
你的第二个表将是SecondTable类的对象,并且你总是喜欢第一个表。