英文:
Add a tooltip rectangle to NSToolBarItem's default view
问题
我有一些NSToolBarItems
用于在我的应用程序中执行撤销/重做操作。我希望它们在工具提示中显示撤销/重做操作的名称。
我可以通过toolTip
属性指定NSToolBarItem
的工具提示。但我不确定何时应该设置此属性。我尚未找到一种在撤销管理器记录新的撤销或重做操作时通知的方法。
最好的方法是在用户悬停在工具栏项上时动态返回工具提示字符串。但这需要向我无法访问的视图添加工具提示矩形。实际上,NSToolBarItem
的view
属性默认返回nil
。如果我将view
属性设置为我的自定义视图,它就不会返回nil
,但默认情况下,NSToolBarItem
使用NSButton
的私有子类作为视图。这个子类实现了NSButton
没有的一些良好行为。所以我宁愿使用默认视图。
是否有一种方法可以向不使用自定义视图的NSToolBarItem
的view
添加工具提示矩形?换句话说,我如何访问这个视图?
英文:
I have some NSToolBarItems
to allow undo/redo in my app. I want them to show the name of undo/redo actions in their tooltip.
I can specify the tooltip of an NSToolBarItem
vial its toolTip
property. But I'm not sure when this property should be set. I haven't found a way to be notified when the undo manager has recorded a new action to undo or redo.
It would be better to dynamically return the tooltip string when the user hovers the toolbar item. But this requires adding a tooltip rectangle to a view that I cannot access. Indeed, the view
property of NSToolBarItem
returns nil
by default. It does not return nil
if I set the view
property with my own view, but a NSToolBarItem
uses a private subclass of NSButton
as view, by default. This subclass implements nice behaviours that NSButton
doesn't. So I'd rather use the default view.
Is there a way to add a tooltip rectangle to an NSToolBarItem
's view
that doesn't use a custom view? IOW, how can I access this view?
答案1
得分: 1
不需要破解 NSToolbarItem
。请使用您的撤销管理器上的 NSUndoManagerCheckpointNotification
通知。每次调用它时,您可以更新两个工具栏项目的工具提示。
[NSNotificationCenter.defaultCenter addObserverForName:NSUndoManagerCheckpointNotification object:self.undoManager queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) {
NSString *undoTitle = self.undoManager.undoMenuItemTitle;
NSString *redoTitle = self.undoManager.redoMenuItemTitle;
// 更新工具栏项目的工具提示
}];
您还可以通过在块中使用 note.object
访问相关的撤销管理器。
英文:
You don't need to hack NSToolbarItem
. Use the NSUndoManagerCheckpointNotification
notification on your undo manager. Every time it is called you can update the tooltip of the two toolbar bar items.
[NSNotificationCenter.defaultCenter addObserverForName:NSUndoManagerCheckpointNotification object:self.undoManager queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) {
NSString *undoTitle = self.undoManager.undoMenuItemTitle;
NSString *redoTitle = self.undoManager.redoMenuItemTitle;
// Update the toolbar items' tooltips
}];
You can also access the relevant undo manager via note.object
in the block.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论