我们正在开发菜单栏项应用,
并且我很想编写一个NSAlert
类别,该类别显示NSPopover
中的警报,该警报显示在NSStatusItem
下方。
到目前为止,该类别实现了以下新方法:
- (void) runAsMenuItemPopUpWithCompletionBlock:(NSAlertCompletionBlock)block {
// Get content view of NSAlert
NSView *alertContentView = [self.window contentView];
// Ask the menu item to show the view as a NSPopOver
[[GFMenuItem sharedInstance] popOverView:alertContentView];
// (...) Handle response with callback
}
但是打开警报
NSAlert *alert = [NSAlert alertWithMessageText:@"Learn more?" defaultButton:@"Learn more" alternateButton:@"Cancel" otherButton:nil informativeTextWithFormat:@"Do you want to view detailed information?"];
[alert runAsMenuItemPopUpWithCompletionBlock:nil];
结果如下所示:
问题是第三个空按钮,帮助按钮和复选框尚未设置为显示。如果没有设置它们,如何消除它们呢?
最佳答案
事实证明,您可以调用[alert layout]
来触发手动布局处理。它将隐藏所有未设置为显示的按钮!
更正的方法:
- (void) runAsMenuItemPopUpWithCompletionBlock:(NSAlertCompletionBlock)block {
// Trigger the layout processing and get content view of NSAlert
[self layout];
NSView *alertContentView = [self.window contentView];
// Ask the menu item to show the view as a NSPopOver
[[GFMenuItem sharedInstance] popOverView:alertContentView];
// (...) Handle response with callback
}