我的UITableView有一些奇怪的行为。当我上下滚动时,有时底行会消失并再次消失。不知道为什么会这样。我的每个UITableCell都包含4个按钮,如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
int x,y;
x=5;
y=0;
for(int i = (int)indexPath.row*4; i<(int)indexPath.row*4+4; i++) {
//make sure we don't hit a blank in the array
if(i<[self.buttons count]) {
UIButton *button = [[UIButton alloc] init];
button = self.buttons[i];
button.layer.cornerRadius = button.frame.size.width / 2;
button.clipsToBounds = YES;
[button setFrame:CGRectMake(x, y, 70, 70)];
[cell.contentView addSubview:button];
x+=80;
}
}
return cell;
}
这可能是因为我为每个单元格都有相同的单元格重用标识符吗?它需要是独一无二的吗?
答案 0 :(得分:1)
在此代码中:
UIButton *button = [[UIButton alloc] init];
button = self.buttons[i];
分配并初始化按钮,然后将变量重新分配给按钮数组的条目i。这意味着什么呢?
您还要将按钮添加到单元格内容中作为子视图。滚动时可以重复使用单元格,因此您可以轻松地向给定单元格添加4个以上的按钮,这将导致您显示问题。当您将单元格出列时,它可能已经有4个按钮。
你能否在单元原型中只有4个按钮,在代码中省去了所有这些工作。
答案 1 :(得分:0)
不,对于tableView,单元重用标识符必须常量。但是你应该使用is作为静态变量。
更改为static NSString *cellID = [NSString stringWithFormat:@"cellID",indexPath.row];
而非。{
NSString *cellID = [NSString stringWithFormat:@"cell%d",indexPath.row];
您还在willDisplayCell
或didEndDisplayingCell
委托方法中进行了任何更改。如果是,Plz也会发布该代码。
答案 2 :(得分:0)
像这样重写:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
if (cell.contentView.subviews.count == 0) {
int x,y;
x=5;
y=0;
for (int i = 0; i < 4; i++) {
UIButton *button = [[UIButton alloc] init];
button = self.buttons[i];
button.layer.cornerRadius = button.frame.size.width / 2;
button.clipsToBounds = YES;
[button setFrame:CGRectMake(x, y, 70, 70)];
[cell.contentView addSubview:button];
x+=80;
}
}
return cell;
}
答案 3 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier=@"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
return cell;
}
}