如图我把一个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就会返回,后面两句永远执行不到
你的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保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值
我是说后面3个return保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值
#4
上述的代码问题不少
1. 交给系统来托管cell的创建的代码拿到外部,不要放到cellForRowAtIndexPath 这个代理方法中
2. 已经交由系统来托管cell 的创建,在拿这个cell实例时不要用你上述中所写的代码 ,使用
3. return cell时 cell3那个位置有问题。
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就会返回,后面两句永远执行不到
你的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保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值
我是说后面3个return保留一个就行了,没有写是会报错,因为不写的话不能确保函数有返回值
#4
上述的代码问题不少
1. 交给系统来托管cell的创建的代码拿到外部,不要放到cellForRowAtIndexPath 这个代理方法中
2. 已经交由系统来托管cell 的创建,在拿这个cell实例时不要用你上述中所写的代码 ,使用
3. return cell时 cell3那个位置有问题。
1. 交给系统来托管cell的创建的代码拿到外部,不要放到cellForRowAtIndexPath 这个代理方法中
2. 已经交由系统来托管cell 的创建,在拿这个cell实例时不要用你上述中所写的代码 ,使用
cell = [tableview dequeueReusableCellWithIdentifier:XXXX];
3. return cell时 cell3那个位置有问题。
#5
问题确实比较多,你应该先在网上看下UITableView的教程,最简单的就是新建一个Master—Detail工程,看下苹果的写法