iOS TableView加载相同的单元格

时间:2018-04-09 11:32:34

标签: ios objective-c uitableview

我使用以下代码来制作标签视图。单击一个选项卡时它会向下展开,这当前工作正常但如果我打开indexPath为0的第一个选项卡,它应该加载一个单独的自定义打开视图,它将加载但是当我转到其他indexPath选项卡时它会显示相同的视图,但如果我重新加载应用程序并首先转到其他选项卡,他们加载正确的视图。这几乎就像应用程序正在制作缓存一样?

有没有办法解决这个问题?

由于

- (void)viewDidLoad {
    row = 1000;
     NSLog(@"row is %d", row);
    [super viewDidLoad];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    infoStory = [userDefaults objectForKey:@"storyname"];
    // Do any additional setup after loading the view.
    numbers = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", nil];

    // Initialize thumbnails
    text = [NSArray arrayWithObjects: @"Arriving by Bus or Train", @"Arriving by Car (Autobahn 5)", @"Arriving by Car (Autobahn 6)", @"Wifi", @"Registration", @"Refreshments", @"Evening Event", @"Contact Information", nil];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(row == indexPath.row){
        if(indexPath.row == 0){
            static NSString *simpleTableIdentifier2 = @"TableViewCellOPENEDbustaxi2";
            TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2];
            if (cell == nil)
            {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENEDbustaxi2" owner:self options:nil];
                cell = [nib objectAtIndex:0];
            }

            cell.text.text = [text objectAtIndex:indexPath.row];
            return cell;
        }
        else{
            static NSString *simpleTableIdentifier = @"TableViewCellOPENED";
            TableViewCell1 *cell2 = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
            if (cell2 == nil)
            {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENED" owner:self options:nil];
                cell2 = [nib objectAtIndex:0];
            }

            cell2.text.text = [text objectAtIndex:indexPath.row];
            return cell2;
        }

    }
    else{
    static NSString *simpleTableIdentifier = @"TableViewCellINFO";

    TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellINFO" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
        cell.text.text = [text objectAtIndex:indexPath.row];
    return cell;
    }
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{
    return [numbers count];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{
    if(row == indexPath.row){
        row = 1000;
        NSLog(@"row is %d", row);
        [self.tableViewObject reloadData];
    }
    else{
        row = indexPath.row;
        NSLog(@"row is %d", row);
        [self.tableViewObject reloadData];
    }


}

@end

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您没有在XIB文件的单元格的属性检查器中指定正确的重用标识符。你应该检查一下你是否使用了错误的一个,因此出列将返回一个意外的单元格。

您还可以手动设置相应的reuseIdentifier,并使用setValue:forKey:小窍门:

static NSString *simpleTableIdentifier2 = @"TableViewCellOPENEDbustaxi2";
TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2];
if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENEDbustaxi2" owner:self options:nil];
    cell = [nib objectAtIndex:0];
     [cell setValue:simpleTableIdentifier2 forKey:@"reuseIdentifier"];
}

等等其他单元格和标识符。