UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath:

Posted

技术标签:

【中文标题】UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath:【英文标题】:UITableView never calls tableView:shouldShowMenuForRowAtIndexPath: on its delegate 【发布时间】:2013-04-25 13:47:19 【问题描述】:

我正在创建并显示UITableView 的一个实例。委托(实际上是我的 UITableView 的子类)永远不会收到以下任何选择器:

tableView:shouldShowMenuForRowAtIndexPath: tableView:canPerformAction:forRowAtIndexPath:withSender: tableView:performAction:forRowAtIndexPath:withSender:

尽管documentation 明确指出,例如在tableView:shouldShowMenuForRowAtIndexPath: 的讨论下

如果用户长按表格视图中的某一行,此方法 (如果实施)首先被调用。如果编辑菜单返回 NO 不应该显示——例如,对应于行的单元格 包含不应复制或粘贴的内容。

其他教程也记录了在表格视图中显示UIMenuController 的快捷方式。为什么这不像记录的那样工作?

【问题讨论】:

【参考方案1】:

虽然目前没有记录(我正在提交文档更新,但谁知道何时/是否会发布),UITableViewDelegate 方法:

tableView:shouldShowMenuForRowAtIndexPath: tableView:canPerformAction:forRowAtIndexPath:withSender: tableView:performAction:forRowAtIndexPath:withSender:

仅当您的表视图实例由 UITableViewController 的实例管理时才会调用。独立的表格视图不会调用这些方法。

如果您的表格视图未连接到表格视图控制器,则您需要在每个表格视图单元格上通过长按侦听器手动显示 UIMenuController(以复制标准系统功能)。

【讨论】:

我尝试实施您的建议。请检查我的问题,如果有任何遗漏或我做错了什么,请告诉我***.com/questions/19402641/… 这不是真的,你只需要一个实现所有 3 种方法的 UITableViewDelegate。 @Paludis 如果这在 ios 7 中发生了变化,那么可能是这样。但是,我可以肯定地说,这是真的。如果表视图独立于 UIViewController 而不是 UITableViewController,则不会在表视图的委托上调用这三个方法。 如果委托不为 nil,则在表视图的委托上调用它们。我刚刚在表格视图控制器上实现了它们。关键是这三种方法都必须实现,如果缺少其中一种,它就不会出现。 至少在 iOS 6 中进行了测试,@vinnybad,只有当您的表格视图包含在 UITableViewController 中时,这才是正确的。

以上是关于UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath:的主要内容,如果未能解决你的问题,请参考以下文章

tableView:cellForRowAtIndexPath: 永远不会被调用

嵌入在 UIStackView 中的 UITableView 不会重新加载数据

UITabBarController 委托方法永远不会被调用

UICollectionViewFlowLayout 委托 insetForSectionAt 从未调用

从 prepareForSegue:sender 设置 UITableView 委托和数据源时出错:

shouldStartLoadWithRequest 永远不会被调用