两个UITableView在同一个类中?数据源和委托

时间:2013-08-18 20:13:12

标签: ios uitableview delegates

我在同一个类中有两个表,我需要每个表包含不同的数据,但我在委托方面有问题...如何使每个表包含一个单独的委托?谢谢,抱歉我的英文。

-(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;
     }

3 个答案:

答案 0 :(得分:3)

您可以通过查看传入的tableView参数来执行此操作。示例:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == self.tableView1) {
        return [dataTable1 count];
    } else /* tableView == self.tableView2 */ {
        return [dataTable2 count];
    }
}

使用此模式,您需要在所有ifUITableViewDataSource方法中添加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类的对象,并且你总是喜欢第一个表。