我们正在开发菜单栏项应用,
并且我很想编写一个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
}

08-05 21:55