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 未在触摸时显示菜单的主要内容,如果未能解决你的问题,请参考以下文章
Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标
如何将选定的 UITableViewController 值添加到以前的 UITableViewController?
在动态 UITableViewController 的标头中嵌入静态 UITableViewController