0

我有 3 个表视图和三个数据源。我用来自 XML 的数据填充它们。当我只填充一个表格视图时,所有表格视图都填充相同的文本。

所有 tableviewcells 具有相同的标识符:“AlbumCell”

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    otoFosilArray = [[NSMutableArray alloc] init];

    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    updateArray = appDelegate.derinlikListesiArrayMikro;

    _arrayFosiller1 = [[NSMutableArray alloc] init];
    _arrayFosiller2 = [[NSMutableArray alloc] init];
    _arrayFosiller3 = [[NSMutableArray alloc] init];

    tableFosiller1.dataSource = self;
    tableFosiller1.delegate = self;
    tableFosiller2.dataSource = self;
    tableFosiller2.delegate = self;
    tableFosiller3.dataSource = self;
    tableFosiller3.delegate = self;

    [self otoFosilEkle];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView == self.tableFosiller1) {
        return 1;
    }
    else if (tableView == self.tableFosiller2) {
        return 1;
    }
    else if (tableView == self.tableFosiller3) {
        return 1;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (cbvMBentik.checked == YES) {
        return [_arrayFosiller1 count];
    }
    if (cbvMPlanktonik.checked == YES) {
        return [_arrayFosiller2 count];
    }
    if (cbvMDiger.checked == YES) {
        return [_arrayFosiller3 count];
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:@"AlbumCell"];
    if (cbvMBentik.checked == YES)
        cell.textLabel.text = [_arrayFosiller1 objectAtIndex:indexPath.row];
    if (cbvMPlanktonik.checked == YES)
        cell.textLabel.text = [_arrayFosiller2 objectAtIndex:indexPath.row];
    if (cbvMDiger.checked == YES)
        cell.textLabel.text = [_arrayFosiller3 objectAtIndex:indexPath.row];

    return cell;
}

- (void)otoFosilEkle
{
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    otoFosilArray = appDelegate.derinlikListesiArrayMikroFosil;

    NSString *tempStr;

    for (int i = 0; i < [otoFosilArray count]; i++)
    {
        if ([[[otoFosilArray objectAtIndex:i] Durum]  isEqualToString:@"Bentik"]) {

            cbvMBentik.checked = YES;
            cbvMPlanktonik.checked = NO;
            cbvMDiger.checked = NO;
            tableFosiller1.userInteractionEnabled = YES;
            tableFosiller2.userInteractionEnabled = NO;
            tableFosiller3.userInteractionEnabled = NO;

            tempStr = @"text1";

            [_arrayFosiller1 addObject:tempStr];
            [tableFosiller1 reloadData];
        }
        if ([[[otoFosilArray objectAtIndex:i] Durum]  isEqualToString:@"Planktonik"]) {

            cbvMBentik.checked = NO;
            cbvMPlanktonik.checked = YES;
            cbvMDiger.checked = NO;
            tableFosiller1.userInteractionEnabled = NO;
            tableFosiller2.userInteractionEnabled = YES;
            tableFosiller3.userInteractionEnabled = NO;

            tempStr = @"text2";

            [_arrayFosiller2 addObject:tempStr];
            [tableFosiller2 reloadData];
        }
        if ([[[otoFosilArray objectAtIndex:i] Durum]  isEqualToString:@"Diğer"]) {

            cbvMBentik.checked = NO;
            cbvMPlanktonik.checked = NO;
            cbvMDiger.checked = YES;
            tableFosiller1.userInteractionEnabled = NO;
            tableFosiller2.userInteractionEnabled = NO;
            tableFosiller3.userInteractionEnabled = YES;

            tempStr = @"text3"

            [_arrayFosiller3 addObject:tempStr];
            [tableFosiller3 reloadData];
        }
    }
}
4

5 回答 5

3

您应该为每个表视图设置一个标签,然后在 switch 语句中检查这些标签以确定您正在使用哪个表视图。

- (void)viewDidLoad
{
    ...
    self.tableFosiller1.tag = 1;
    self.tableFosiller2.tag = 2;
    self.tableFosiller3.tag = 3;
    ...
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSInteger num = 0;
    switch(tableView.tag)
    {
       case 1:
       case 2:
       case 3:
         num = 1;
         break;
    }
    return num;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger num = 0;
    switch(tableView.tag)
    {
       case 1:
         num = [_arrayFosiller1 count];
         break;
       case 2:
         num = [_arrayFosiller2 count];
         break;
       case 3:
         num = [_arrayFosiller3 count];
         break;
    }
    return num;    
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText = nil;
    switch(tableView.tag)
    {
       case 1:
         cellText = [_arrayFosiller1 objectAtIndex:indexPath.row];
         break;
       case 2:
         cellText = [_arrayFosiller2 objectAtIndex:indexPath.row];
         break;
       case 3:
         cellText = [_arrayFosiller3 objectAtIndex:indexPath.row];
         break;
    }

    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:@"AlbumCell"];
    if(!cell)
       cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:@"AlbumCell"];
    cell.textLabel.text = cellText;

    return cell;
}

如您所见,当涉及多个表视图时,事情会变得非常棘手。如果您对此不太满意,我建议您使用免费的 Sensible TableView 框架。该框架仅通过获取数组并生成表视图来工作。如果您将其与上面的代码进行比较,那真的很简单。

于 2013-03-26T09:13:14.030 回答
3

你需要检查

if (tableView == self.tableFosiller1) {

}
else if (tableView == self.tableFosiller2) {

}
else if (tableView == self.tableFosiller3) {

}

在所有委托方法中,因为您具有相同的标识符

于 2013-03-26T09:00:09.620 回答
1

所有委托方法,您需要检查以下条件

if (tableView == table1) {

}
else if (tableView == table2) {

}
else if (tableView == table3) {

}
于 2013-03-26T09:04:04.040 回答
1

您需要三种类型的可重复使用的细胞

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

在此方法中为三种不同的细胞类型创建三个标识符和代码。

于 2013-03-26T09:05:24.670 回答
0
if([tableView isEqual:self.tableFosiller1]){

  }
else if([tablView isEqual:self.tableFosiller2]){

   }
else if([tableView isEqual:self.tableFosiller3]){

    }

只需检查所有 tableView 委托方法

于 2013-03-26T09:07:39.290 回答