微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UIMenu不弹出

如何解决UIMenu不弹出

我试图在用户按下正确的 UIMenu 后弹出一个 UIBarButton,但问题是 UIMenu 没有弹出,我不知道为什么,会很酷如果你们能帮我解决这个问题。

  • 我还添加评论代码以向您展示所有尝试。

  • 我的问题是我何时设置了 UIBarButton 但不确定。顺便提一句!我没有使用计算属性,因为当我使用这种方式时我无法编辑它们,所以我只使用了一个普通的存储变量。

我的代码

// MARK: - UIBarButtonItem Creation and Configuration
    
     func configureUIButtons() {
        
//        let toolbarButtonItems = [
//            customTitleBarButtonItem,//            flexibleSpaceBarButtonItem,//            deleteBarButtonItem
//        ]
        
        let toolbarButtonItems = [
            markBarButtonItem,flexibleSpaceBarButtonItem,deleteBarButtonItem
        ]
        
        toolBar.setItems(toolbarButtonItems,animated: true)
    }
    
    
    
    var deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete",style: .plain,target: self,action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)))
    
    
    
//    var deleteBarButtonItem: UIBarButtonItem {
//        let deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete",action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)));
//
//        return deleteBarButtonItem
//
//    }

    
    var flexibleSpaceBarButtonItem: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,target: nil,action: nil)
    
    
//    var flexibleSpaceBarButtonItem: UIBarButtonItem {
//        return UIBarButtonItem(barButtonSystemItem: .flexibleSpace,//                               target: nil,//                               action: nil)
//    }
    
    
    
    var markBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Mark",action: #selector(NotificationsViewController.markButtonItemClicked(_:)))
    
    
    
    // MARK: - Actions
    @objc
    func deleteButtonItemClicked(_ barButtonItem: UIBarButtonItem) {
        print("Delete Button is clicked \(barButtonItem).")
    }

    
    @objc
    func markButtonItemClicked(_ barButtonItem: UIBarButtonItem ) -> UIMenu {
        print("Mark is pressed")


        let markMenu = UIMenu(title: "",children: [
                    UIAction(title: "Flag",image: UIImage(systemName: "flag")) { action in
                        print("Flag is pressed")
                    },UIAction(title: "Mark as Unread",image: UIImage(systemName: "envelope.badge")) { action in
                        print("Mark as Unread is pressed")
                    },])

                return markMenu

    }
    
    
//    func menuItems() -> UIMenu {
//        let markMenu = UIMenu(title: "",children: [
//            UIAction(title: "Flag",image: UIImage(systemName: "flag")) { action in
//                print("Flag is pressed")
//            },//            UIAction(title: "Mark as Unread",image: UIImage(systemName: "envelope.badge")) { action in
//                print("Mark as Unread is pressed")
//            },//        ])
//
//        return markMenu
//    }
//
    

解决方法

您没有为菜单使用正确的初始化程序。

let markMenu = UIMenu(title: "",children: [
    UIAction(title: "Flag",image: UIImage(systemName: "flag")) { action in
        print("Flag is pressed")
    },UIAction(title: "Mark as Unread",image: UIImage(systemName: "envelope.badge")) { action in
        print("Mark as Unread is pressed")
    },])
let markBarButtonItem = UIBarButtonItem(title: "Mark",image: nil,primaryAction: nil,menu: markMenu)
let toolBar = UIToolbar(frame: CGRect(origin: .zero,size: CGSize(width: 300,height: 100)))
toolBar.setItems([markBarButtonItem],animated: true)
,

在条形按钮初始化中添加选择器时使用“self”代替视图控制器的名称(NotificationsViewController),或者如果您不喜欢将 self.不需要时在方法和属性前面。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。