【问题标题】:Button inside table cell not clickable表格单元格内的按钮不可点击
【发布时间】:2023-07-27 17:38:01
【问题描述】:

我有一个自定义单元格,其中有两个按钮连接到它的方法。我像这样将单元格添加到表格中:

BSOrderedItemCell *cell = (BSOrderedItemCell *)[tableView dequeueReusableCellWithIdentifier:@"OrderItemCell"];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"OrderItemCell" owner:self options:nil];
    cell = (BSOrderedItemCell *)[nib objectAtIndex:0];
}

然后我设置它的属性。

单元格大小与表格的 heightForRowAtIndexPath: 相同,并且没有任何单元格标签或按钮超出该大小。

问题是我可以选择单元格,但无法点击按钮。就好像我在点击一个标签,没有任何反应。所以我最终得到了这样的结果:

编辑:只是为了澄清事情。问题不在于按钮单击方法。是我无法实际点击按钮,好像有什么东西挡住了它,或者它被某些控件禁用了。

【问题讨论】:

  • 自定义 BSOrderedItemCell 类的代码在哪里,按钮操作在哪里?
  • 您是否使用 NSLog 或 Break 点检查控件是否正在执行这些方法?
  • 是的,我尝试记录这些方法,但它们从未被调用过。问题是它甚至无法点击(它不会像点击时的常规按钮那样改变颜色)。
  • BSOrderedItemCell 只有- (IBAction)decreaseByOne:(id)sender { NSLog(@"Decrease %@", name.text); } 连接到按钮,没有别的。以及加号按钮的增加方法
  • 您是否看到单击按钮时显示的日志消息。是否调用了 IBAction?

标签: ios objective-c uitableview xcode5


【解决方案1】:

你需要做以下事情

  1. 在 yourcellxib 中设置按钮的标签。 orderitemcell 在您的情况下
  2. 获取按钮

    UIButton *btn =(UIButton*)[cell viewWithTag:]; btn.tag=indexPath.row;

3.向按钮添加方法

[btn addTarget:self action:@selector(buttonClicked:)  forControlEvents:UIControlEventTouchUpInside];

现在创建一个方法

-(void)buttonClicked:(UIButton*)btn
{
NSLog(@"the button clicked is on cell number%d",btn.tag);

}

【讨论】:

  • 我已经试过了。问题不在于方法。无法单击“物理”按钮。好像有些东西不允许。
  • 在模拟器上运行-> 从菜单转到调试选项卡选择颜色混合图层,看看按钮上方是否有某些视图
  • 我得到了这样的东西。所以我猜不是这样。 dropbox.com/s/xtxe6o9yk0zovwv/…
  • 你的按钮是“-”还是“+”
  • 两者,它们都与它们的 IBActions 相关联,而 IBActions 应该只执行 NSLog。但问题是我什至无法在点击时获得按钮动画,所以当我点击它们时甚至没有点击它们。它们的行为有点像 UILabel。
【解决方案2】:

你可以试试这个..

[cell.button addTarget:self action:@selector(buttonClicked:)  forControlEvents:UIControlEventTouchUpInside];

为了避免单元格选择:

Cell's xib -> Selection -> Set as None

【讨论】:

  • 这不能解决问题。按钮甚至没有选择,如果它有目标也没关系。
【解决方案3】:

不要创建 IBOutlot 然后在你的 cellForRowAtIndexpath 中添加方法到按钮

[cell.button addTarget:self action:@selector(buttonClicked:)  forControlEvents:UIControlEventTouchUpInside];

并在那里执行选择器,如果您不需要行,则选择委托然后添加

cell.userInteractionEnabled = NO; //也是

【讨论】:

  • 问题是我确实需要一行,第二个问题是单元格甚至没有点击。它不像普通按钮那样显示动画,因此将其连接到方法在这里不是问题。
  • + 和 - 是你的按钮吗?
  • 是的,只是普通的 UIButtons。
  • 我认为你应该至少尝试添加一次目标,因为你可以确定为什么选择器没有调用
  • @Retro 如果你将NO设置为单元格,你不能访问按钮,因为它也是单元格的子视图。
最近更新 更多