【问题标题】:Don't dismiss NSAlert when button is clicked单击按钮时不要关闭 NSAlert
【发布时间】:2012-08-02 22:04:23
【问题描述】:

我正在展示一个带有自定义视图和三个按钮的 NSAlert。自定义视图有两个文本字段,它允许用户登录。

在 Mac App Store 中,出现了具有类似设计的 NSAlert。当用户单击登录按钮时,NSAlert 不会关闭(直到验证凭据)。 Apple 如何保持警报?

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    获取您想要以不同方式表现的NSButton。改变它的目标和行动。 (要调用原始目标/动作,请在更改之前保留它们。)

    NSAlert *alert = ...;
    NSButton *button = [[alert buttons] objectAtIndex:...];
    
    id oldTarget = [button target];
    SEL oldAction = [button action];
    [button setTarget:self];
    [button setAction:@selector(verifyCredentials:)];
    

    或者,您可能希望将警报构建为自定义窗口控制器和 XIB(这就是 Apple 在 App Store 中的做法。)在这种情况下,您可以对按钮行为进行细粒度控制。

    【讨论】:

    • 很好的答案。它提出了 App Store 不会破解 NSAlert 的观点,并解释了如何做到这一点,还解释了如何做 OP 认为他想要的,所有这些都非常简洁明了。
    • 如何在该方法中关闭。
    • 如果您有新问题,您应该提出新问题,而不是评论现有问题。
    【解决方案2】:

    Swift 4 风格

    let alert = NSAlert()
    alert.alertStyle = .informational
    alert.messageText = "Y/N?"
    alert.addButton(withTitle: "Y")
    alert.addButton(withTitle: "N")
    
    guard let window = view.window else { return } // for NSViewController
    
    alert.beginSheetModal(for: window) { res in
        if res == .alertFirstButtonReturn {
            // "Y" action
        } else {
            // "N" action        
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2011-01-02
      • 2012-09-23
      • 1970-01-01
      相关资源
      最近更新 更多