1

我有一个问题,将按钮设置为UITableviewCell.
之后viewDidLoad,按钮在正确的位置。但是当我向下滚动时,按钮在其他任何地方。

这是我的代码,希望你能帮助我。
提前致谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

if (indexPath.section == 0 && indexPath.row == 0 && _isAddImageViewLoad == NO) {
    // Add Image Button
    UIButton *addImage = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage* image = [UIImage imageNamed:@"AddImage@2x"];
    addImage.frame = CGRectMake(110.0f, 10.0f, 110.0f, 110.0f);
    [addImage setImage:image forState:UIControlStateNormal];

    [cell.contentView addSubview:addImage];
    _isAddImageViewLoad = YES;
} else {
    NSDictionary *dictionary = [_items objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"data"];
    NSString *cellValue = [array objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
}

return cell;

}

4

5 回答 5

1

这是因为您正在重用单元格,并且当按钮在您的 else 部分中不应该是一个简单的解决方案时,它就会被放置。addImage.hidden = YES;在你的 if 语句中写下andaddImage.hidden = NO;

于 2013-04-24T17:08:15.320 回答
0

看这行代码:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

这行代码意味着UITableViewCells不是每次都创建。当您上下滚动时,它们会被重复使用。使用上面的代码,UIButton将在正确的位置创建按钮,但是随着单元格的重复使用,它将在随机位置创建按钮。

解决问题的一种快速方法,将上面的代码行更改为简单

UITableViewCell *cell;
于 2013-04-24T17:07:24.750 回答
0

只是几件事。如果您使用“AddImage”,它会自动使用“AddImage@2x”(如果它是 Retina 显示器)。我认为这不会解决您的问题,但可能会导致奇怪。

当一个表格视图单元格从视图中滚动出来时,它在某种意义上被“回收”了。看起来您正在使用 bool 来排除原始单元格再次使用按钮加载。如果您总是希望它位于“顶部”,则可能需要使用标题来按住按钮。您可能还想验证在重用单元格时是否删除了按钮。如果不是,它将显示在重用该单元格的下一行中。

附带说明... 按钮在表格视图单元格中通常不能很好地工作,因为它们以非常不同的方式处理触摸。让他们感觉自然需要相当多的修改,但那是另一回事。

希望有帮助!

于 2013-04-24T17:12:39.310 回答
0

问题是因为细胞重用。如果按钮退出,您需要在 else 子句中添加一些代码来删除按钮。一种方法是给你的按钮一个标签,比如:

addImage.tag = 10;

然后在你的 else 子句中:

}else{
    if (cell viewWithTag:10) [[cell viewWithTag: 10] removeFromSuperview];
    ...
于 2013-04-24T17:14:07.720 回答
0

问题是由于单元格的出队。表格视图第一次创建单元格时,所有单元格都通过

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

代码。但是当第 0 行第 0 行移出屏幕时,该单元格被推入单元格可重用队列。

现在,当您的 tableview 需要显示第 0 行第 0 行时,它将从重用队列中获取一个单元格。您将不会获得与第一次相同的单元格。所以现在你可能有 2 个带有按钮的单元格。

您应该做的是为第 0 行第 0 部分以及所有其他部分和行设置不同的 CellIdentifier。创建单元格时还要创建按钮。因此,在 tableView 第一次创建单元格之后,您将不会创建按钮的所有内容。

于 2013-04-24T17:14:12.263 回答