我在写一个有一个图表内卡图。我 UITableViewController, 我实现的 -tableView:didSelectRowAtIndexPath:, 但当我选择了一行,在运行时,该方法是不是正在叫。表认为是填充的,所以我知道,其他提供方法在我的控制。

没有任何人有任何想法什么我可能搞砸了让这种事发生?

有帮助吗?

解决方案

听起来该类可能不是该表视图的 UITableViewDelegate ,但 UITableViewController 应该自动设置。

您是否有机会将委托重置为其他课程?

其他提示

以防有人犯了与我一样的愚蠢错误:

检查您希望 didSelect 的方法名称是否可能以某种方式意外获得 didDeselect 。我花了大约两个小时才发现...

可能导致问题的另一个问题不是选择选择类型:

Single Selection 用于正常选择, No Selection

另一种可能性是UITapGestureRecognizer可能正在吃这些事件,如下所示: https://stackoverflow.com/a /二十一万四千零七十零分之九百二十四万八千八百二十七

我没有怀疑这个原因,因为表格单元格仍会突出显示蓝色,就像水龙头正在通过一样。

所有好的答案,但还有一个要注意......

(特别是在以编程方式创建UITableView时)

确保tableView可以通过设置 [tableView setAllowsSelection:YES]; 或删除任何将其设置为 NO 的行来响应选择。

如果问题出现 UITapGestureRecognizer 你可以解决这个问题:

  • 在故事情节:

enter image description here

在代码 Objective-C:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap];

[tap setCancelsTouchesInView:NO];

在代码 Swift:

let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)

tap.cancelsTouchesInView = false

在这种情况下我遇到过两件事。

  1. 您可能忘记实施UITableViewDelegate协议,或者您的班级与您的表格视图之间没有授权插座。

  2. 您的行内可能有一个UIView,它是第一个响应者,可以点击您的点击。说一个UIButton或类似的东西。

我遇到了同样的问题。而且很难找到。但在我的代码中的某个地方 是这样的:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    return nil;
}

必须是 return indexPath ,否则 -tableView:didSelectRowAtIndexPath:未被调用。

如果您在UITableView上添加了gestureRecognizer,则不会调用 didSelectRowAtIndexPath

因此,您需要使用gestureRecognizer委托方法来避免在特定视图中触摸。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isDescendantOfView:YourTable]) {
        return NO;
    }
    return YES;
}

我遇到了一个问题,经过几个月不看我的代码后,我忘记了由于一些不必要的要求而实施了以下方法

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath  *)indexPath{
    return NO;
}

它应该为一行返回YES以使其被选中。

你必须选择这些选项

但如果您想在点击时未突出显示 UITableView ,则应在 UITableViewCell 属性中进行更改。

为选择选择无选项,如下所示

我在表视图上放了一个 UITapGestureRecognizer 来解除阻止 didSelectRowAtIndexPath:被调用的键盘。希望它可以帮到某人。

如果您遇到与我相同的问题: 显然,如果tableView处于编辑模式,则不会调用此方法。您必须将allowsSelectionDuringEditing设置为true。

通过这个问题:编辑时,`UITableView`不会调用didSelectRowAtIndexPath ??

我遇到了同样的问题,

原因是使用 UITapGestureRecognizer 。当我在其他任何地方拍摄时,我希望键盘能够解散。我意识到这会覆盖所有tap操作,这就是为什么 didSelectRowAtIndexPath 函数没有调用。

当我评论与 UITapGestureRecognizer 相关的行时,它可以正常工作。此外,如果点击的是 UITableViewCell ,你可以检查 UITapGestureRecognizer selector 的功能。

对于Xcode 6.4,Swift 1.2。选择“标签”在IB中已经改变了。我不知道如何以及为什么。将其设置为“单一选择”使我的表视图细胞再次可选。

在我的情况下,didSelctRowAtIndexPath未调用是因为我在tableView的选择属性中选择了 none ,设置为单选解决了我的问题

即使已经接受了另一个答案,我还会为观察此问题的人添加一个可能的问题和解决方案:

如果启用了自动引用计数(ARC),您可能会发现即使将控制器指定为视图的委托,也不会收到视图到控制器的消息,因为ARC正在删除控制器。显然,UITableView的委托指针不算作ARC的引用,因此如果它是对它的唯一引用,则控制器将被解除分配。您可以通过在控制器上实现dealloc方法并在那里设置断点或NSLog调用来验证是否发生了这种情况。

解决方案是通过其他地方的强引用来跟踪控制器,直到您确定不再需要它为止。

请记住在viewDidLoad方法中设置数据源和委托,如下所示:

[self.tableView setDelegate:self];

[self.tableView setDataSource:self];

我的问题不是上述问题。太蹩脚了。但我想我会把它列在这里,以防它帮助某人。

我有一个 tableViewController ,它是我的“基础”控制器,然后我创建此控制器的子类。我在“base”中的 tableView:didSelectRowAtIndexPath 例程中编写了我的所有代码。类。完全忘记了默认情况下,我的所有子类中也创建了这个例程(尽管没有任何代码可以做任何事情)。因此,当我运行我的应用程序时,它运行代码的子类版本,什么也没做,让我伤心。当然,一旦我从子类中删除了例程,它就使用了mt“base”。课程例行,我在做生意。

我知道。不要笑。但也许这会在我失去的那个时刻拯救某人...

给我2美分。

我有一个自定义UITableViewCell并且有一个覆盖整个单元格的按钮,所以当触摸发生时,按钮被选中而不是单元格。

要么删除按钮,要么在我的情况下,我在按钮上将User Interation Enable设置为false,这样单元格就是选中的。

如果你读到这个,那么仍然无法解决问题。

我有自定义单元格,其中复选框“用户互动已启用”被禁用了。所以,我只是打开它。祝好运。

我刚刚拥有这个并且过去发生在我身上的事情没有用,因为我在尝试添加方法时没有注意自动完成,我实际上最终实现了 tableView:didDeselectRowAtIndexPath :而不是 tableView:didSelectRowAtIndexPath:

我知道已经过时了,问题解决了,但是有一个类似的问题,我认为问题出在我的自定义UITableViewCell上,但解决方案完全不同 - 我重启XCode :)然后工作正常!几乎像Windows:)

如果您的表视图处于编辑模式(例如 [tableView setEditing:YES animated:NO]; ),则需要设置 tableView.allowsSelectionDuringEditing = YES;

确保您实现了 tableView:didSelectRowAtIndexPath 而不是 tableView:didDeSelectRowAtIndexPath

这让我有好几次!!

你可能做的另一个错误(正如我所做的):如果在单元格中设置了segue,则不会调用 didSelectRowAtIndexPath 。您应该在视图控制器中设置segue。

这些答案都不适合我。大约一个小时后,我发现了一些非常阴险的东西:

我在另一个表视图的单元格内有一个表视图。我决定创建一个包含内部表视图的封闭视图。我将此视图称为contentView并将其连接到xib中。

事实证明,UITableViewCell已经有了一个contentView,并且用它做了一些奇怪的事情。当我将属性重命名为mainContentView并将视图重新连接到此重命名的属性时,问题自行解决。

就我而言,我在加载时动态计算 TableView SuperView 的高度。由于计算错误, TableView 位于 SuperView 之外。 TableView 被绘制得很好,但所有交互都被禁用(并且从未调用 didSelectRowAtIndexPath )。很难检测,因为没有视觉指示 TableView 不可“访问”。

在我的情况下,解决方案是在下面的函数中将NO更改为YES。

iOS 9 +

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

好的,在这里更新我刚遇到这个问题,我的问题与此处发现的略有不同。

我查看了IB并看到我的委托已设置,但是它被错误地设置为VIEW而不是File的所有者(右键单击表视图以查看委托指向的位置)。

希望能帮到某人

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top