当Nsstatusbar IconView图像更改时,我的弹出视图控制器消失了



我有一个状态栏应用程序,该应用在状态栏中显示一个绿色圆圈,每10秒与红色圆圈交替。它通过使用item.view = icon1;item.view = icon2;来更改图像来做到这一点。这样的初始化:

let item = NSStatusBar.systemStatusBar().statusItemWithLength(-1);
self.icon1 = IconView(imageName: "icon1", item: item);
self.icon2 = IconView(imageName: "icon2", item: item);

单击绿色或红色圆圈时,我已经制作的一些设置的弹出视图看起来不错。

item.view更改为红色或绿色时,问题是在每个10秒间隔,弹出视图关闭并要求用户再次单击绿色或红色按钮以显示它。

我如何使弹出窗口持续存在,但状态栏图像更改,只有在用户再次单击红色或绿色按钮后才消失?

这是我的awakeFromNib(),用于弹出视图:

override func awakeFromNib()
{
    let edge = NSMinYEdge
    let icon = self.icon
    let icon2 = self.icon2
    let icon3 = self.icon3
    let rect = icon.frame
    let rect2 = icon2.frame
    let rect3 = icon3.frame

    icon.onMouseDown = {
        if (icon.isSelected)
        {
            self.popover?.showRelativeToRect(rect, ofView: icon, preferredEdge: edge);
            return
        }
        self.popover?.close()
    }
    icon2.onMouseDown = {
        if (icon2.isSelected)
        {
            self.popover?.showRelativeToRect(rect2, ofView: icon2, preferredEdge: edge);
            return
        }
        self.popover?.close()
    }
    icon3.onMouseDown = {
        if (icon3.isSelected)
        {
            self.popover?.showRelativeToRect(rect3, ofView: icon3, preferredEdge: edge);
            return
        }
        self.popover?.close()
    }

}

}

您将附加的弹出声附加到视图中,该视图将从视图层次结构中删除。而不是每次使用单个视图将新视图分配给NSStatusItem,然后更改其属性以显示不同的状态(即更改其image属性)。

另外,您可以创建一个空的NSView并将其分配给NSStatusItem视图属性。然后,您可以根据需要在该视图中添加并显示图标。确保将弹出窗口连接到这个空视图而不是单个图标。

在popover类dealloc方法中放一个断点以查看堆栈跟踪。您会发现为什么从堆栈跟踪发生这种情况。

最新更新