16

所以在这里我将一个工作的 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 无关。

感谢您的帮助。

4

5 回答 5

33

解决了:

[cell.contentView setUserInteractionEnabled: NO];
于 2013-09-17T08:26:23.147 回答
4

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

于 2013-09-17T11:40:45.410 回答
4

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

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

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

于 2013-10-08T12:44:25.183 回答
2

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

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

故事的寓意:把正确的东西拖到你的xib上。

于 2013-11-10T22:31:20.433 回答
1

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

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

于 2013-11-16T06:49:22.173 回答