用作自定义 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 没有重用?