8

如何禁用单元UserInteractionUITableview但不在该单元格上的自定义按钮中..

我正在使用创建一个按钮:

    UIButton *dayButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [dayButton setFrame:CGRectMake(201, 0, 30, 35)];
    [dayButton addTarget:self action:@selector(selectDayView) forControlEvents:UIControlEventTouchUpInside];
    [dayButton setBackgroundImage:[UIImage imageNamed:@"86-camera.png"] forState:UIControlStateNormal];
    dayButton.userInteractionEnabled=YES;
    [cell addSubview:dayButton];

然后我设置

    cell.userInteractionEnabled=NO;

我怎么能得到dayButtonAction

4

9 回答 9

17

不要禁用用户与整个单元格的交互。设置cell.selectionStyle = UITableViewCellSelectionStyleNone以防止单元格选择。这样用户仍然可以与按钮交互。

于 2013-07-08T09:19:45.667 回答
3

如果您设置了,cell.userinteraction = NO那么您将无法触摸按钮,因为任何交互都已关闭,cell并且它是subviews.

于 2013-07-08T09:18:48.140 回答
2

一个老问题,但认为这可能对某人有所帮助。您可以通过将 selection 的属性设置为 no selection 来禁用 UITableView 的用户交互。

身份检查员

于 2014-12-19T09:20:17.700 回答
2

另一种选择是覆盖 touchesBegan 和 touchesEnded。就是这样:

1)制作一个具有覆盖功能的自定义单元格和一个指示器来应用它们

class MyCustomTableViewCell: UITableViewCell { 
    var shouldDisableTouches: Bool = false

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if !shouldDisableTouches { super.touchesBegan(touches, with: event) }
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        if !shouldDisableTouches { super.touchesEnded(touches, with: event) }
    }
}

2)在情节提要中,将您的单元格类设置为自定义类>类中的此类

3) 现在在 tableView(_:cellForRowAt:) 中,您可以打开或关闭交互

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier", for: indexPath) as! MyCustomTableViewCell
    if <your condition here> {
         cell.shouldDisableTouches = true
    } else {
         cell.shouldDisableTouches = false
    }
}

...“其他”部分在这里是必不可少的,不要丢弃它。毕竟它是一个可重复使用的细胞。

这种禁用不会影响按钮,这些按钮位于单独的 xib 中,已为此单元注册。尚未在单元格上测试它,直接在情节提要中设计。

于 2017-10-04T18:29:12.377 回答
1

您也可以设置[cell setSelectionStyle:UITableViewCellSelectionStyleNone];不实现tblView:didSelectRowAtIndexPath:. 使您的按钮可点击(默认情况下)。处理事件以执行您的任务。

据我了解,如果 Superview 已userintercation = no启用,则它的子视图无法交互。在您的情况下, UITableViewCell 是超级视图,按钮是子视图。所以最好避免设置cell.userInteractionEnabled = NO;和使用UITableViewCellSelectionStyleNone

希望这可以帮助 :)

于 2013-07-08T09:27:06.223 回答
1

如果 cell.userinteraction = NO那你不能碰它subviews。简单的方法是只需将视图的大小UIViewclearColour您的单元格大小相同,然后将其放在单元格和上方的视图上,您​​可以设置您的UIButton. 当您想cell.userinteraction = NO设置view.hidden=NO时,cell.userinteraction = Yes然后设置view.hidden=YES。所以你的透明UIView显示和上面的视图UIButton然后你可以点击按钮。无需设置cell.userinteraction

于 2013-07-08T09:40:56.373 回答
0

userInteraction不能对 UITableView应用禁用而不是 on UITableViewCell。启用时,您可以访问 UITableVie 的内容/控制器(这是 的子视图UITableView)。当您添加任何控制器时, 实际上您已添加它,但单元格是其中的一部分,因此当您禁用它意味着它也为 UITableViewCell 设置它(否)。userInteractionUITabelViewUITableViewUITableViewCellUITableViewuserInteractionUITableView

在这里我还给你建议将你UIButton的单元格添加为

[cell.contentView addSubView:buttonName];
于 2013-07-08T09:23:58.853 回答
0

您不能在 Cell 上设置禁用用户交互,因为它是添加按钮的超级视图。如果这样做,您将无法与按钮交互,因此禁用 UITableViewCell 其余子视图的交互。

于 2013-07-08T10:10:52.210 回答
0

[Swift] 对我有用的是 cell.isUserInteractionEnabled = true (我的意思是不要将其设置为 false,默认为 true)

并设置,

cell.selectionStyle = .none

于 2020-08-18T08:16:26.853 回答