我想用內容視圖中的按鈕觸發 StatusBar Controller 中的一個函式,該按鈕隱藏或顯示選單欄彈出視窗,但我收到此錯誤:
引數型別“ContentView”應為類或類約束型別的實體
狀態欄控制器
..........
init(_ popover: NSPopover)
{
self.popover = popover
statusBar = NSStatusBar.init()
statusItem = statusBar.statusItem(withLength: 28.0)
if let statusBarButton = statusItem.button {
statusBarButton.image = #imageLiteral(resourceName: "StatusBarIcon")
statusBarButton.image?.size = NSSize(width: 18.0, height: 18.0)
statusBarButton.image?.isTemplate = true
statusBarButton.action = #selector(togglePopover(sender:))
statusBarButton.target = self
}
eventMonitor = EventMonitor(mask: [.leftMouseDown, .rightMouseDown], handler: mouseEventHandler)
}
@objc func showPopover(sender: AnyObject) {
if(popover.isShown) {
hidePopover(sender)
}
else {
displayPopover()
}
}
func displayPopover() {
if let statusBarButton = statusItem.button {
popover.show(relativeTo: statusBarButton.bounds, of: statusBarButton, preferredEdge: NSRectEdge.maxY)
eventMonitor?.start()
}
}
func hidePopover(_ sender: AnyObject) {
popover.performClose(sender)
eventMonitor?.stop()
}
func mouseEventHandler(_ event: NSEvent?) {
if(popover.isShown) {
hidePopover(event!)
}
}
內容視圖
var statusBar: StatusBarController?
Button("Show/Hide Popover "){
statusBar?.showPopover(sender: self)
}
uj5u.com熱心網友回復:
只要給它nil發件人,就像
Button("Show/Hide Popover "){
statusBar?.showPopover(sender: nil) // << here !!
}
并使用可選的發件人進行所有控制器操作,例如
@objc func showPopover(sender: AnyObject?) {
// ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/495246.html
