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

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

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

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

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

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

【问题讨论】:

    标签: ios objective-c uimenucontroller uitableview


    【解决方案1】:

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

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

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

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

    【讨论】:

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