- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
实际上所有 NSStatusItem
都已在 10.10 中弃用,底层 NSStatusBarButton
的行为似乎令人困惑。
目前我正在开发一个菜单栏应用程序。当用户单击应用程序的菜单栏图标时,我的应用程序委托(delegate)中的一个方法将通过目标操作调用,该方法显示带有一些信息的 NSPopover(如果它已经可见,则将其关闭)。
通常情况下,如果您已经将 NSMenu 与 NSStatusItem 相关联,那么当用户单击菜单栏图标时,该图标将一直突出显示为蓝色,直到菜单关闭。类似地,单击系统音量图标会弹出一个 slider 并将其图标突出显示为蓝色,直到包含该 slider 的 View 消失。
但是,由于我是打开 NSPopover 的人,系统反而会在鼠标按下时突出显示图标为蓝色,然后在调用我的方法后在鼠标抬起时将其恢复为正常。这意味着我似乎无法在该循环上做任何事情来保持高光。我希望图标在鼠标抬起时继续突出显示,并且只有在我告诉它时(即当我关闭弹出窗口时)才恢复正常。
我不知道该怎么做。我试过使用
[self.statusItem.button setHighlighted: YES];
//or [self.statusItem.button highlight: YES];
当我在我的应用委托(delegate)中收到鼠标弹起事件并打开弹出窗口时。问题是系统仍然有它,显然,从较早的鼠标按下时突出显示此帧/循环,并且在我将其设置为突出显示后,由于鼠标抬起,它立即将其设置为未突出显示。我可以通过将其封装在一个方法中并稍后使用计时器或延迟选择器运行该方法来解决这个问题。这允许我保持图标突出显示但引入了闪烁;当鼠标向下移动时,图标会自动突出显示,当鼠标向上移动时,它会在一帧内取消突出显示,然后我的方法会重新突出显示它。
我还想也许我可以使用已弃用的 setHighlightMode:
并将其设置为 NO
以防止图标在单击时自动突出显示,然后使用 setHighlighted :/highlighted:
手动设置它,但这也不起作用。同样,我想也许这也行得通:
NSButtonCell* cell = (NSButtonCell*)self.statusItem.button.cell;
cell.highlightsBy = NSNoCellMask;
但无论点击它会自动突出显示图标,并在调用我的方法后立即取消突出显示。
基本上:
- The undesirable automatic highlighting behavior of
NSStatusBarButton
interferes with manually setting the highlight state, unless I delay manually setting it which introduces a short flicker.- The only thing that seems to successfully disable this automatic behavior is the deprecated
setHighlightMode:
, but this seems to prevent all highlighting, manual or not.- The only work around seems to be to add a subview to the NSButtonCell, add an event listener for mouse up and then set the highlight state of the superview as per here: NSStatusBarButton keep highlighted but I would think there'd be a simpler way to just... disable the automatic highlighting altogether.
tl;dr:有没有一种方法可以让我轻松地完全控制何时以及何时不突出显示我的菜单栏图标,以便我可以在显示 NSPopover 时让它自然突出显示?
最佳答案
我最终通过不设置 NSStatusItem
的操作选择器属性解决了这个问题。相反,我使用了 NSEvent
的 addLocalMonitorForEventsMatchingMask:handler:
。在处理程序 block 中,我检查 event.locationInWindow
是否在我的状态项的 .bounds
内。如果是这样,我发送 .action
将手动发送的消息,然后返回 nil
以防止事件被传递。如果它不在状态图标的范围内,我将返回 event
以便它正常传递。在我的点击处理方法中,当我的弹出窗口显示/关闭时,我使用 [self.statusItem.button highlight: YES/NO]
。
长话短说:
在 applicationDidFinishLaunching:
__block AppDelegate* appDelegate = self;
[NSEvent addLocalMonitorForEventsMatchingMask: NSEventMaskFromType(NSLeftMouseDown) handler:^NSEvent* (NSEvent* event){
if (NSPointInRect(event.locationInWindow, appDelegate.statusItem.button.bounds)){
[appDelegate clickedMenuBarIcon: event];
return nil;
}
return event;
}];
在 clickedMenuBarIcon:
中,我可以设置高亮状态。由于我在我的处理程序 block 中返回了 nil
,它阻止了事件的传递,因此自动突出显示永远不会发生,我可以手动完成。
如果有任何与此相关的错误,我将不胜感激任何建议。
关于objective-c - 在显示弹出窗口时保持 NSStatusBarButton 突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495755/
我连续有 11 个图像,如果鼠标悬停在其中一个图像上,我希望弹出一个弹出窗口。所以每 11 个图像都有不同的弹出窗口。我已经有一些代码可以执行此操作,但它仅适用于第一张图像。 代码:index.htm
是否可以从 NSColorWell 制作一个 NSColorPanel“弹出”,几乎像一个弹出菜单? 我不喜欢它作为调色板的实现方式,因为有时它与哪个 NSColorWell 关联并不明显。 谢谢!
我正在考虑一个想法,基本上我想要一个带有 NSPopoverController 的 NSStatusItem 。我读到了人们遇到的所有问题,但我只是想尝试一下。现在有干净的方法吗?我见过的所有版本都
如何获取 JS 打开的弹出窗口的 url。这是我的代码: var _url = 'someurlhere'; var popupwindow = window.open(_url, "Popu
我正在设计一个网页,我希望当用户单击链接时,弹出窗口(新窗口)将打开一个链接网页。我的代码如下所示 function win(add,w,h) { window.open(add,"","widt
我正在寻找 C 中的简单堆栈实现,并找到了类似的东西: void pop(struct stack **top) { struct stack *temp; temp = malloc(s
我正在尝试使用 paypal 实现登录,我有 2 个不同的主机域 1- www.example.com 2- www.example.de 对于 paypal,我需要为此目的选择一个返回 URL,我选
我正在尝试找出如何复制此处显示的“弹出式” View 动画:https://imgur.com/a/irFqdiP .我正在使用当前代码来显示我的 viewController,但目前只有一个淡入淡出
有谁知道在 Windows 2000 或更高版本上以编程方式关闭 CD 托盘的方法?打开 CD 托盘存在,但我似乎无法关闭它,尤其是在 W2k 下。 如果可能的话,我特别想从批处理文件中寻找一种方法来
当您访问http://www.daniweb.com时你得到一个弹出窗口,这叫什么 + 知道怎么做吗? 感谢您的回复,只有模态加载动画的最简单方法是什么,即页面加载时动画显示以及动画何时完成? ASP
我正在为 Unity 引擎中的音频过滤器创建一个 C# 脚本。 我的问题是,在通过我的过滤器运行后,生成的音频具有一致且频繁的“咔哒声”、“砰砰声”或“跳过声”。听起来有点像旧 radio 。 我不确
我必须隐藏浏览器的地址栏。我正在使用这段代码: var winFeature = 'location=no,toolbar=no,menubar=no,scrollbars=yes,r
推荐一个button 弹起pickerview的源码,也可以作为工具类使用。 利用inputview 做键盘弹起动画。该如何做呢? 1.继承uiview 2.重写属性&方法
我在这里有一个问题,我已经工作了几个小时。 我正在导入一个 Excel 文件,并使用此代码来执行此操作: Dim objExcel As Excel.Application Di
我基本上是从 UITableViewController 推送 UIView,它包含的只是 UIWebView。但是,当我删除 UIView 以返回到 UITableView 时,应用程序崩溃了。 -
我有几个由导航 Controller 控制的 View Controller 。 例如,viewController A 和 viewController B 都可以将 viewController
我使用新的Gmail API为用户创建草稿。 API响应提供了新创建的消息ID。 然后,我可以使用URL https://mail.google.com/mail/#drafts?compose=[m
Redis列表实现了哪种内部数据结构以实现这一目的?链表将需要O(n)索引,而数组将需要O(n)左/右推/弹出。 最佳答案 根据official documentation,它们被实现为linked
我正在使用 WPF Popup 控件,它显示背景为黑色。我在其中放置了一个 StackPanel 并设置了 Background="Transparent",但这没有帮助。
我希望页面内的容器在事件时占据页面的整个宽度并覆盖在其他所有内容上。这是我目前所拥有的,但它没有按我想要的方式工作: $(function() { $('.main a').click( fu
我是一名优秀的程序员,十分优秀!