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

时间:2013-09-13 07:53:34

标签: ios objective-c uitableview uibutton ios7

所以我在这里将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无效。

感谢您的帮助。

5 个答案:

答案 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来确定这一点。