用作自定义 UITableViewCell 的 XIB 中的自定义按钮不响应点击(ios7)

Posted

技术标签:

【中文标题】用作自定义 UITableViewCell 的 XIB 中的自定义按钮不响应点击(ios7)【英文标题】:Custom buttons in XIB used as Custom UITableViewCell don't respond to taps (ios7) 【发布时间】:2013-09-13 07:53:33 【问题描述】:

所以我在这里将一个正常工作的 ios6 应用程序升级到 ios7,现在我无法在我的 tableviewcells 内的自定义按钮(或其他子视图)上接收点击或其他操作。

编辑:

我的代码:

这里是我部署 PlaceCell 的地方

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    static NSString *cellIdentifier = @"PlaceCell";

    PlaceCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];

    if (!cell) 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PlaceCell" owner:self options:nil];
        cell = [nib lastObject];
        cell.reuseIdentifier = cellIdentifier;
    
    [cell configureCellWithPlace: [self.places objectAtIndex:indexPath.row]];
    cell.delegate = self;
    cell.userInteractionEnabled = YES;

    return cell;

然后它是一个带有按钮的普通自定义单元格,这些按钮通过界面连接到一些操作。 它在 iOS6 上完美运行,但在 iOS7 上没有任何作用。

感谢您的帮助。

【问题讨论】:

你能告诉你在“configureCellWithPlace”方法中做了什么吗? 我用那行解决了我的问题:[cell.contentView setUserInteractionEnabled: NO];感谢您的关注。 【参考方案1】:

解决方法:

[cell.contentView setUserInteractionEnabled: NO];

【讨论】:

它没有。还有那是怎么解决的?我的意思是你的按钮是 contentView 的一部分。在 contentView 中禁用 userInteraction 也会禁用底部的 userInteraction。 这仅适用于具有创建自定义 UITableViewCell 的旧样式的应用程序,在 XIB 中,没有 ContentView。这就是为什么它适用于某些情况而不适用于其他情况。 这将起作用,因为单元格将不再响应触摸事件。但是,如果您希望按钮做一件事,而触摸单元格中的其他地方做另一件事,这不是一个选项。【参考方案2】:

将您的按钮放入单元格的contentView

【讨论】:

你的意思是它不是自动的? 如果您最初使用旧版本的 Xcode 创建视图,则不会。【参考方案3】:

当您在 xib 文件中的 Cell 视图不是 UITableViewCell,而只是 UIView 时,就会发生这种情况。确保 xib 的顶视图是 UITableViewCell。

您可以通过查看界面构建器中主视图的第一个子视图来轻松检查它。如果第一个子视图不是“内容视图”,那么您应该在顶部使用 UITableViewCell 重建单元格。

还要确保该按钮是“内容视图”的子视图。

【讨论】:

其他各种修复对我不起作用,但这解决了它。谢谢马罗斯。 我创建了一个新的xib 文件,其中根视图是UITableViewCell,然后它的子视图是Content View,然后它的子视图是UIButton 和几个@ 987654325@...这篇文章中报告的问题仍然存在【参考方案4】:

我遇到了类似的问题。我已将UIView 拖入xib 以用作我的UITableViewCell。即使我在 Interface Builder 中将类名更改为 UITableViewCell 的子类,我的按钮上的事件仍然没有触发。因为它最初是一个UIView,IB 从来不知道contentView,也没有向它添加我的控件。

将“真实”UITableViewCell 拖入 xib,将其类更改为我想要的类,然后重新连接 IBOutlets 修复所有问题。也不需要弄乱delaysContentTouches 或其他属性。

故事的寓意:将正确的东西拖到您的 xib 上。

【讨论】:

Xcode 6 自动将视图添加到笔尖作为 UIView,所以我只是假设我可以在下拉列表中选择 UITableView。因此,您需要按照建议删除它创建的 UIView 并拖动到 UITableViewCell 上。棘手!【参考方案5】:

似乎当您使用界面构建器自定义单元格子类时,所有添加的视图都添加到 contentView 下方。这就是在内容视图上设置 userInteractionEnabled = NO 有效的原因,因为允许通过触摸事件。

我使用 po [view recursiveDescription] 和 lldb 来确定这一点。

【讨论】:

以上是关于用作自定义 UITableViewCell 的 XIB 中的自定义按钮不响应点击(ios7)的主要内容,如果未能解决你的问题,请参考以下文章

来自笔尖的自定义 UiTableViewCell 没有重用?

##DAY12 UITableViewCell自定义

带有自定义 UITableViewCell 的 AVPlayer

自定义 UITableViewCell 的首选方式

自定义UITableViewCell

自定义 UITableViewCell 中的自定义 UIView