一个tableView上使用三个自定义的问题 能够显示两个不同cell但打三个就开始复用第一个了

时间:2022-08-30 07:59:20
一个tableView上使用三个自定义的问题 能够显示两个不同cell但打三个就开始复用第一个了
如图我把一个tableview分成三个部分;每个部分分别注册一个cell;但是到第三个就开始复用第一个cell了,求解???
代码部分 :

[img=http://im[code=objc
]- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title=@"test";
    _table=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 460) style:UITableViewStyleGrouped];
    _table.delegate=self;
    _table.dataSource=self;
    [self.view addSubview:_table];
    
    
    // Do any additional setup after loading the view.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{
    
    return 3;
    
    
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    

    static NSString *customCell1 = @"CustomCell1";
    static NSString *customCell2 = @"CustomCell2";
    static NSString *customCell3=@"CustomCell3";
    UINib * nib = [UINib nibWithNibName:@"cell1" bundle:nil];
    
    [tableView registerNib:nib forCellReuseIdentifier:customCell1];
    
    UINib *nib2=[UINib nibWithNibName:@"cell2" bundle:nil];
    
    [tableView registerNib:nib2 forCellReuseIdentifier:customCell2];
    
    UINib *nib3=[UINib nibWithNibName:@"cell3" bundle:nil];
    
    [tableView registerNib:nib3 forCellReuseIdentifier:customCell3];
    
    
    cell1 *c1 = (cell1 *)[tableView dequeueReusableCellWithIdentifier:customCell1];
    cell2 *c2 = (cell2 *)[tableView dequeueReusableCellWithIdentifier:customCell2];
    cell3 *c3=(cell3 *)[tableView dequeueReusableCellWithIdentifier:customCell3];
    
    switch (indexPath.row) {
        case 0:
            if (c1 == nil) {
                //cell1 =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCell1];
                c1 = [[cell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCell1];
                
            }
            return c1;
            break;
        case 1:
            if (c2 == nil) {
                c2 =[[cell2 alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCell2];
            }
            return c2;
            break;
            if (c3 == nil) {
                c3 = [[cell3 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCell3];
            }
            return c3;
        
            break;
            
    }
    return c1;
    return c2;
    return c3;
    
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row==0) {
        return 59;
        
    }
    if (indexPath.row==1) {
        return 50;
        
    }
    return 50;
    
    
}

5 个解决方案

#1


你这代码问题很多啊,一些基础的东西你还是要先弄清楚
你的switch语句只case了0和1两行,row=3的时候case不到,又没有default语句,所以直接跳到后面执行return c1了,所以第三行是c1
另外
    return c1;
    return c2;
    return c3;
你这后面两个return根本就是多余,代码一遇到return就会返回,后面两句永远执行不到

#2


虽然写了case 3: 但是还是不执行的,还有后边的三个return我知道写了没用但是不加上直接就报错  不知道怎么修改了,求教!

#3


case0,1,2都写了吗?那应该没什么问题啊,提示什么错误?

我是说后面3个return保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值

#4


上述的代码问题不少
1. 交给系统来托管cell的创建的代码拿到外部,不要放到cellForRowAtIndexPath 这个代理方法中
2. 已经交由系统来托管cell 的创建,在拿这个cell实例时不要用你上述中所写的代码 ,使用
cell = [tableview dequeueReusableCellWithIdentifier:XXXX];

3. return cell时 cell3那个位置有问题。

#5


问题确实比较多,你应该先在网上看下UITableView的教程,最简单的就是新建一个Master—Detail工程,看下苹果的写法

#1


你这代码问题很多啊,一些基础的东西你还是要先弄清楚
你的switch语句只case了0和1两行,row=3的时候case不到,又没有default语句,所以直接跳到后面执行return c1了,所以第三行是c1
另外
    return c1;
    return c2;
    return c3;
你这后面两个return根本就是多余,代码一遇到return就会返回,后面两句永远执行不到

#2


虽然写了case 3: 但是还是不执行的,还有后边的三个return我知道写了没用但是不加上直接就报错  不知道怎么修改了,求教!

#3


case0,1,2都写了吗?那应该没什么问题啊,提示什么错误?

我是说后面3个return保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值

#4


上述的代码问题不少
1. 交给系统来托管cell的创建的代码拿到外部,不要放到cellForRowAtIndexPath 这个代理方法中
2. 已经交由系统来托管cell 的创建,在拿这个cell实例时不要用你上述中所写的代码 ,使用
cell = [tableview dequeueReusableCellWithIdentifier:XXXX];

3. return cell时 cell3那个位置有问题。

#5


问题确实比较多,你应该先在网上看下UITableView的教程,最简单的就是新建一个Master—Detail工程,看下苹果的写法