iOS:点击UITableView不会调用didSelectRowAtIndexPath

Ant*_*yer 16 uitableview ipad ios ios6

我的应用程序使用一个UITableView带有UINavigationController显示当表中的行挖一个更详细的视图-基本钻取程序.

当我在一排水龙头,它被突出显示,但委托方法tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath:不叫(认证使用调试器).

现在这里是奇怪的部分:

  1. 应用程序中还有一些其他表视图(它们没有向下钻取),并且它们都没有出现问题.

  2. 如果我迅速并反复挖掘排,多次尝试后(10 - 20是正常的),tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath: 称为和处理继续正常进行.

  3. 问题发生在运行iOS 6的(任何,实际上)iPad上.它适用于运行iOS 5的iPad,或运行任何iOS版本6的任何iPhone.它也适用于使用iOS 5或6的iPad模拟器.

因此,在调用委托方法之前,似乎有些东西正在接收.但是什么?

我没有使用任何UITapGestureRecognizer,所以这不是问题.我没有使用多个UITableViewControllers表,所以这也不是问题.

Aid*_*ery 11

在iOS6中运行时,我遇到了这个应用程序的问题.该tableView:didSelectRowAtIndexPath:方法从未被触发,即使它在更新到iOS6之前正在工作.

我终于通过查看表的xib和属性检查器来弄明白了.在"表视图"部分中,我将" 选择"选项设置为" 无选择"并且未选中" 在触摸显示选择".

将" 选择"选项更改为" 单个选择"实际上让我再次使用此选项并且未选中"保持触摸显示选择"意味着选择行时我看不到任何闪烁或颜色变化.


小智 8

我遇到了类似的问题.iOS 6似乎对桌面视图单元上的轻微向上移动更加敏感.它似乎将最轻微的动作记录为滚动请求而不是单元格选择.我的表视图设置为,scrollEnabled = NO因为它是具有静态选择值的表视图.表格视图显示在较大的iPad视图的一个小区域内.如果我小心地敲击一个单元格并直接向上提起,则选择单元格.

要解决这个问题,我改变了scrollEnabledYES并确保献给我的tableView面积比需要显示表视图的实际面积,从而防止它滚动.不确定这是否是您遇到的问题的原因,但希望它有所帮助.


bol*_*nad 6

我有同样的问题.didSelectRowAtIndexPath在iOS6中运行时,UITableView没有触发该方法,但它在iOS5.1中运行良好.

我也实现了

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

并返回NO.在iOS5中,一切正常,但是当我切换到iOS6时,它将停止触发didSelectRowAtIndexPath.一旦我删除了该shouldHighlightRow方法,一切都在iOS6中有效.干杯!


Oli*_*gey 5

didSeletRowAtIndexPath()不被调用的通常原因是UITapGestureRecognizer在viewcontroller Cancels touches中设置了一个视图设置为YES.

正确且唯一合理的解决方法是设置Cancels touches视图NO.然后你的表行选择应该很好地工作.

显然,这会对您的手势处理程序产生一些影响 - 您可能需要向手势处理程序添加一些代码,以阻止某些触摸进入您的视图,即

- (IBAction)onTapGesture:(UITapGestureRecognizer *)sender {

    if (sender.view == someOldViewThatINeedToDealWith) {
        sender.cancelsTouchesInView = true;
    }
}
Run Code Online (Sandbox Code Playgroud)


Ant*_*yer 1

解决方案确实很奇怪:UITableViewController 注册了所有通知。在通知处理程序中,表视图数据正在使用重新加载

[self.tableView reloadData]
Run Code Online (Sandbox Code Playgroud)

根据 Apple DTS 的说法,当表重新加载数据时,这会导致向观察者发送通知,从而导致竞争条件......

没有解释为什么它有时会工作或者为什么它总是在 iPhone 上工作。但注册一小部分通知(即我真正感兴趣的通知)就解决了问题!