首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tableView: IndexPath *总是返回零IndexPath

tableView: IndexPath *总是返回零IndexPath
EN

Stack Overflow用户
提问于 2013-11-03 05:43:38
回答 1查看 3.1K关注 0票数 2

在我正在开发的一个应用程序中,在桌面单元格上设置一个长新闻手势时,我遇到了一些问题。我已经尝试了三种不同的配置,但还没有得到一个成功的工作。

(设想1)

我将一个UILongPressGestureRecognizer添加到我的自定义UITableViewCell类中,并在自定义单元格类中处理操作(显示操作表)。这起作用了,但引入了将单元格呈现的对象链接起来的必要性,然后使我无法更新表数据源(操作表用于移除项),因此,尽管UIActionSheet设置运行良好,我还是放弃了这一点。

(设想2)

UILongPressGestureRecognizer添加到表视图,但由包含表视图的控制器处理它的操作(我使用的是通用UITableView)。在手势识别器的操作中,我尝试这样做:

代码语言:javascript
复制
if (sender.state == UIGestureRecognizerStateBegan) {
    CGPoint point = [sender locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];

    if (indexPath == nil)
        return;

    // Fetch item from index path and show action sheet
}

这在测试if (indexPath == nil)中失败了。

(设想3)

在创建每个单元格时,我发现了一个在每个单元格上添加一个UILongPressGestureRecognizer的例子,并在包含表视图的控制器中仍然使用相同的处理程序时这样做。然后,我将上述测试更改为:

代码语言:javascript
复制
if (sender.state == UIGestureRecognizerStateBegan) {
    NSIndexPath *indexPath = [self.tableView indexPathForCell:(MyCustomCell *)[sender view]];

    if (indexPath == nil)
        return;

    // Fetch item from index path and show action sheet
}

同样,在测试if (indexPath == nil)上,这也是持续失败的。

为了获取索引路径,必须在表视图上执行一些操作吗?还是在错误的位置执行这些检查?是否有更好的方法来添加(最好是不可见的)方法来显示删除确认?

编辑

在@Joel的评论中添加更多的信息。

下面是在模拟器中加载的视图:http://grab.by/rHTA

为了提供一些可视信息,视图中选定的行(从顶部第3行)是我将对以下日志的上下文执行长按手势的行。

代码语言:javascript
复制
2013-11-03 10:42:08.434 Application[35392:70b] Long press point = (143.000000, 168.000000)
2013-11-03 10:42:08.434 Application[35392:70b] IndexPath is nil

正如您可以从日志"IndexPath is nil"中看到的那样,只有当表视图没有返回点的索引路径时,"IndexPath is nil"才会被打印为indexPath == nil。这一点在表框架内是有效的。

这是用我为场景2列出的相同的设置执行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-03 16:57:09

我之所以这样回答是因为它解决了我的问题。

我很抱歉让每个人都知道这个问题,但事实证明,核心问题是未能将表视图链接到视图控制器中的IBOutlet中,这一点我最初做过,但在实现这个冗长的新闻问题时,它一定是意外删除的。

将链接添加回视图控制器,使self.tableView不再是nil本身,我开始获得准确的结果。

我很抱歉以前没能证实这样简单的事情,以后也会注意到的。感谢@Joel和@rdelmar试图让我走上正确的轨道,但正如你们都说的,只要其他一切都相应地设置,每个场景都应该工作(而且确实会)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19750192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档