UITableviewController 未在触摸时显示菜单

Posted

技术标签:

【中文标题】UITableviewController 未在触摸时显示菜单【英文标题】:UITableviewController not showing Menu on touch 【发布时间】:2015-12-30 10:32:15 【问题描述】:

请查看我的代码并提出更正或我需要做的任何类型的代码更改,以便让菜单显示在选定的表格行上。请帮忙,我是 ios 新手。

import UIKit

class CutomerHomeTab: UITableViewController 

override func viewDidLoad() 
    super.viewDidLoad()

    addCustomMenuItems()

    

override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.


func addCustomMenuItems()  //CUSTOM MENU IMPLEMENTED

    let menuController = UIMenuController.sharedMenuController()
    var newItems = menuController.menuItems ?? [UIMenuItem]()


    newItems.append(UIMenuItem(title: "Abort", action: MenuAction.Abort.selector()))
    newItems.append(UIMenuItem(title: "Accomplish", action: MenuAction.Accomplish.selector()))
    menuController.menuItems = newItems



enum MenuAction:String
    case Accomplish = "Accomplish:"         //ENUMERATED DATA TYPES DECLARATION FOR MENUACTION
    case Abort = "Abort:"

                  //We need this awkward little conversion because «enum»'s can only have literals as raw value types. And «Selector»s aren't literal.
    func selector()->Selector
        return Selector(self.rawValue)
                                                        //IMPLEMENTATIION OF       SELECTOR FUNCTION
            //END OF SELECTOR FUNCTION
            //END OF ENUM DECLARATION

func Accomplish(sender:AnyObject?)
    print("Did something new!accomplished")     //FUNCTION FOR IMPLEMENTATION OF ACCOMPLISH

func Abort(sender:AnyObject?)
    print("Did something new!aborted")           //FUNCTION FOR IMPLEMENTATION OF ABORT



override func tableView(tableView: UITableView, canPerformAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) -> Bool //FUNCTION TO LET USER PERFORM ACTION ON THE GIVEN ROW
    return action == MenuAction.Accomplish.selector() || action == MenuAction.Abort.selector()


override func tableView(tableView: UITableView, performAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) 
    //You can handle standard actions here, but custom actions never trigger this. It still needs to be present for the menu to display, though.


 override func tableView(tableView: UITableView, shouldShowMenuForRowAtIndexPath indexPath: NSIndexPath) -> Bool    ///FUNCTION FOR SELECTION OF ROW
    return true





override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 7



override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

    return cell






【问题讨论】:

【参考方案1】:

UIMenuController 应用程序单例负责呈现编辑操作菜单项,例如复制、剪切、删除、选择等。关于它有很棒的NSHipster tutorial。恐怕 Accomplish and Abort 实际上并不是编辑操作。所以我猜想使用 UIMenuController 并不是完全正确的决定。如果您想为用户提供一些关于点击表格视图单元格的选项,您最好使用 UIActionSheet。如果您想以与 UIMenuController 完全相同的方式显示选项,我宁愿建议您考虑使用一些 CocoaPod,例如 https://github.com/camelcc/MenuPopOverView。

【讨论】:

我可以创建自定义项目,例如中止或完成 当然。您可以在 NSHipster 的文章 UIMenuItem 部分中找到有关此的信息。但从用户体验方面来看,这不是一个正确的决定。

以上是关于UITableviewController 未在触摸时显示菜单的主要内容,如果未能解决你的问题,请参考以下文章

在触发下一个功能之前等待 iframe 加载?

Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标

如何将选定的 UITableViewController 值添加到以前的 UITableViewController?

在动态 UITableViewController 的标头中嵌入静态 UITableViewController

当转到另一个 UITableViewController 时 UITableViewController 冻结

重新加载 UITableViewController