gpt4 book ai didi

objective-c - 当 NSStatusBar IconView 图像更改时,我的弹出 View Controller 消失

转载 作者:行者123 更新时间:2023-11-30 10:15:49 25 4
gpt4 key购买 nike

我有一个状态栏应用程序,它在状态栏中显示一个绿色圆圈,并每 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);

当您单击绿色或红色圆圈时,会出现一个弹出窗口 View ,其中包含我所做的一些设置。

问题是,每隔 10 秒,当 item.view 变为红色或绿色时,弹出窗口 View 就会关闭,并要求用户再次单击绿色或红色按钮才能显示它。

如何使弹出窗口在状态栏图像发生变化时仍然存在,并且仅在用户再次单击红色或绿色按钮时消失?

这是我的弹出 View 的 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()
}



}

}

最佳答案

您已将弹出窗口附加到稍后从 View 层次结构中删除的 View 。不要每次都为 NSStatusItem 分配一个新 View ,而是使用单个 View 并更改其属性以显示不同的状态(即更改其 image 属性)。

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

关于objective-c - 当 NSStatusBar IconView 图像更改时,我的弹出 View Controller 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com