【问题标题】:Make UITableViewCell behave like a real button使 UITableViewCell 表现得像一个真正的按钮
【发布时间】:2013-03-27 01:19:57
【问题描述】:

我想让UITableViewCell 表现得像真正的按钮。

直到知道我一直在使用

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` 

技巧,但这不是最佳选择,因为它在点击/拖动/释放时的行为不像button

如果您点击一个单元格行并将手指拖过该单元格,当您松开手指时它不会被选中(但按钮会在相同情况下启动其操作)。

有没有什么简单的方法可以让UITableViewCell 表现得像一个真正的按钮,而无需在cell 中插入一个实际的UIButton

【问题讨论】:

    标签: ios objective-c cocoa-touch cocoa uikit


    【解决方案1】:

    您可以只创建带有按钮的表格视图单元格,将按钮标签设置为行,以便在收到按钮事件时确定按钮所属的行。只需确保在返回重复使用的表格视图单元格而不是创建新单元格时重置按钮标签。

    【讨论】:

      【解决方案2】:

      继承 UITableViewCell 并使用以下方法:

      - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
        [super setHighlighted:highlighted animated:animated];
        if (highlighted) {
          _backgroundImageView.image = [UIImage imageNamed:@"img_h"];
        }
        else {
          _backgroundImageView.image = [UIImage imageNamed:@"img"];
        }
      }
      

      其中 img 是普通图像,img_h 是该图像的突出显示版本。

      【讨论】:

      • 恐怕这不能回答我的问题。我想要的是单元格执行类似于 UIButton“Touch Up Inside”行为的操作。也就是说,只有当您在单元格内触摸并释放该触摸时才会触发的方法。 UIButton 允许在释放点击之前在按钮内部进行触摸和拖动,并且该操作将触发。如果您在触摸之后和释放之前拖动(即使您没有拖出单元格),UITableViewCell 将停止被选中,因此不会触发操作。请注意,我希望在释放时触发操作,而不是在触摸时触发。
      • 为此,您还需要重写“setSelected:animated:”方法,但出于复制现有功能的原因而做类似的事情是多余的。只需在单元格中使用 UIButtons。
      【解决方案3】:

      一种方法是创建一个与单元格大小相同的 UIButton 并将其添加到单元格中。

      或者您可以简单地将UITapGestureRecognizer 添加到您的UITableViewCell 中,这将为您完成工作。

      【讨论】:

        猜你喜欢
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多