美文网首页
为NSTableview、NSOutlineView添加右键菜单

为NSTableview、NSOutlineView添加右键菜单

作者: mapg | 来源:发表于2019-06-19 15:49 被阅读0次
列表右键菜单是非常常用的功能,甚至可以说是必备的功能,合理的右键菜单可以极大的提高app的效率和用户体验。
image.png

在cocoa的列表编程中,实现右键菜单有两种方法:

1,重写NSView的有方法:

- (nullable NSMenu *)menuForEvent:(NSEvent *)event;的方法, NSTableView 是 NSView 的子类,NSOutlineView是NSTableView的子类,该方法比较复杂。

2,使用苹果给我们提供的现成的API实现,方法如下(以NSOutlineView为例):

第一步:创建NSMenu赋值给NSOutlineView,设置NSMenu代理
    @IBOutlet weak var outLineView: NSOutlineView!{
        didSet{
            let menu = NSMenu(title: "删除订单")
            menu.delegate = self
            outLineView.menu = menu
      }
第二步骤:实现代理
extension AgentTrip:NSMenuDelegate{
    func menuNeedsUpdate(_ menu: NSMenu) {
        //获取右键选中的row
        let row = outLineView.clickedRow
        //根据相中的row得到对应的item
        let item = outLineView.item(atRow: row)
        //判断对应的item的类型添动态添加不同的右键菜单
        if item is Trip {
            menu.removeAllItems()
            menu.addItem(NSMenuItem(title: "删除此次代购", action: #selector(deleteTrip(_:)), keyEquivalent: ""))
            menu.addItem(NSMenuItem(title: "为此次代购添加订单", action: #selector(addOrder(_:)), keyEquivalent: ""))
        }else{
            menu.removeAllItems()
            menu.addItem(NSMenuItem(title: "删除该订单", action: #selector(deleteOrder(_:)), keyEquivalent: ""))
            menu.addItem(NSMenuItem(title: "为该订单添加商品", action: #selector(addProduct(_:)), keyEquivalent: ""))
        }
        
    }
    
    //实现菜单item的响应功能
    @objc func deleteTrip(_ item:NSMenuItem){
        let row = outLineView.clickedRow
        if let item = outLineView.item(atRow: row) as? Trip{
            Trip.removeTrip(tripName: item.name)
            
            for (i,e) in tripArray.enumerated(){
                if e.name == item.name{
                    tripArray.remove(at: i)
                    break
                }
            }
            outLineView.removeItems(at: IndexSet(integer: row), inParent: false, withAnimation: .effectFade)
        }
        
    }

相关文章

网友评论

      本文标题:为NSTableview、NSOutlineView添加右键菜单

      本文链接:https://www.haomeiwen.com/subject/gpskqctx.html