将 UIButton 动态添加到 UITableViewCell 错误

Posted

技术标签:

【中文标题】将 UIButton 动态添加到 UITableViewCell 错误【英文标题】:Dynamically adding UIButton to UITableViewCell error 【发布时间】:2014-06-20 15:54:00 【问题描述】:

我使用以下代码将 UIButton 添加到 UITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  static NSString *CellIdentifier = @"Cell";
  MainCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) 
    cell = [[MainCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  

  self.btnMessage = [[UIButton alloc] initWithFrame:CGRectMake(20, 300, 54, 15)];
  [self.btnMessage setBackgroundImage:[UIImage imageNamed:@"message.png"] forState:UIControlStateNormal];
  [self.btnMessage addTarget:self action:@selector(messageButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [self.btnMessage setTitle:@"Message" forState:UIControlStateNormal];
  self.btnMessage.titleLabel.font = [UIFont systemFontOfSize:12.0f];
  [self.btnMessage setTitleEdgeInsets:UIEdgeInsetsMake(0, 12, 0, 0)];
  [cell addSubview:self.btnMessage];

  return cell;

当我运行此代码时一切正常,但是如果我滚动表格,按钮将在每个单元格中一次又一次地添加,例如叠加或每个单元格都叠加了一些相同的按钮,那么如何解决这个问题?

【问题讨论】:

【参考方案1】:

移动代码以在if (cell == nil) 语句中添加按钮。这将确保按钮仅添加到新单元格,而不是出列单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  static NSString *CellIdentifier = @"Cell";
  MainCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) 
    cell = [[MainCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    self.btnMessage = [[UIButton alloc] initWithFrame:CGRectMake(20, 300, 54, 15)];
    [self.btnMessage setBackgroundImage:[UIImage imageNamed:@"message.png"] forState:UIControlStateNormal];
    [self.btnMessage addTarget:self action:@selector(messageButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.btnMessage setTitle:@"Message" forState:UIControlStateNormal];
    self.btnMessage.titleLabel.font = [UIFont systemFontOfSize:12.0f];
    [self.btnMessage setTitleEdgeInsets:UIEdgeInsetsMake(0, 12, 0, 0)];
    [cell addSubview:self.btnMessage];
  

  return cell;

【讨论】:

以上是关于将 UIButton 动态添加到 UITableViewCell 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将 UIButton 添加到 UIToolBar?

如何将手势识别器添加到 UITableViewCell 的 UIImage 和 UIButton?

在具有动态高度的视图末尾添加一个 UIButton

在 UIView 中动态居中对齐多个不同大小的 UIButton

如果将 UIButton 作为子视图添加到 UIImageView,则单击 UIButton 不起作用

动态大小的 UILabel 直接跟在 UIButton 后面