所以我在这里将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无效。
感谢您的帮助。
答案 0 :(得分:33)
解决:
[cell.contentView setUserInteractionEnabled: NO];
答案 1 :(得分:4)
当您在xib文件中的Cell视图不是UITableViewCell,而只是UIView时会发生这种情况。确保xib的顶视图是UITableViewCell。
您可以通过查看界面构建器内主视图的第一个子项轻松检查它。如果第一个子视图不是“内容视图”,那么您应该在顶部使用UITableViewCell重建单元格。
还要确保该按钮是“内容视图”的子视图。
答案 2 :(得分:3)
将您的按钮放入单元格的contentView
。
答案 3 :(得分:2)
我有类似的问题。我已将UIView
拖入xib以用作我的UITableViewCell
。即使我在Interface Builder中将类名更改为UITableViewCell
的子类,我的按钮上的事件仍然没有触发。由于它最初是UIView
,因此IB从不知道contentView
并且没有添加我的控件。
将“真实”UITableViewCell
拖入xib,将其类更改为我想要的类,然后重新启动IBOutlets
修复所有内容。不需要弄乱delaysContentTouches
或其他属性。
故事的道德:将正确的东西拖到你的xib上。
答案 4 :(得分:1)
当您使用界面构建器自定义单元子类时,所有添加的视图都会添加到contentView下面。这就是在内容视图上设置userInteractionEnabled = NO的原因,因为允许触摸事件通过。
我使用po [view recursiveDescription]
和lldb来确定这一点。