【问题标题】:Custom buttons in XIB used as Custom UITableViewCell don't respond to taps (ios7)用作自定义 UITableViewCell 的 XIB 中的自定义按钮不响应点击(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];感谢您的关注。

标签: ios objective-c uitableview uibutton ios7


【解决方案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 来确定这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多