【问题标题】:How to create custom NSAlert Sheet Method with the Completion Handler paradigm如何使用 Completion Handler 范例创建自定义 NSAlert Sheet 方法
【发布时间】:2014-06-08 17:01:14
【问题描述】:

我已经使用这种简单的通用方法一段时间了,它适用于基于应用程序的对话框,但是我希望在工作表样式对话框中使用相同的功能,但我很难将它们组合在一起。

根据我理解的文档,OS10.9 及更高版本中唯一不推荐使用的方法是将 NSAlert 类与完成处理程序进程一起使用。这似乎使得从通用方法返回 Bool 几乎是不可能的。

我的代码:

-(BOOL)confirm :(NSString*)questionTitle withMoreInfo:(NSString*)addInfo andTheActionButtonTitle:(NSString*)actionType{
    BOOL confirmFlag = NO;

    NSAlert *alert = [NSAlert alertWithMessageText: questionTitle
                                 defaultButton:actionType
                               alternateButton:@"Cancel"
                                   otherButton:nil
                     informativeTextWithFormat:@"%@",addInfo];
    [alert setAlertStyle:1];

    NSInteger button = [alert runModal];

    if(button == NSAlertDefaultReturn){
        confirmFlag = YES;

     }else{

        confirmFlag = NO;
     }

     return confirmFlag;

 }


 The [alert runModal] returns the value I can return.

使用较新的范例,[alert beginSheetModalForWindow:[self window]sheetWindow completionHandler: some_handler] 不允许我在方法结束时更新或返回值。我知道为什么,但是有没有一种我没有想到的方法来实现这一点。

请告诉我如何创建与我一直用于工作表的方法类似的方法。

谢谢 三重

【问题讨论】:

    标签: objective-c objective-c-blocks nsalert


    【解决方案1】:

    假设调用confirm:withMoreInfo:andTheActionButtonTitle:的代码是从validate调用的。

    -(void)validate
    {
    NSAlert *alert = [[NSAlert alloc] init];
    [alert setMessageText:questionTitle];
    // fill out NSAlert
    
    [alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) {
        if(returnCode == NSModalResponseStop)
        {
            confirmFlag = YES;
        }
        else
        {
            confirmFlag = NO;
        }
    //Rest of your code goes in here.
    }];
    
    }
    

    您的其余代码需要INSIDE完成块。

    【讨论】:

    • 很好的例子,但如果代码必须放在块中,它不能解决能够调用常规对话框的问题。当用户按下保存按钮或删除按钮时,我想调用相同的方法作为确认。必须在一个块中完成代码而不是能够简单地返回 confirmFlag 是我的问题。没有办法吗?
    • 我不这么认为。从以前的同步解决方案到当前的异步 NSAlert 需要重新考虑您的代码结构。
    • 我害怕那个。好的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2015-06-08
    • 1970-01-01
    • 2015-02-09
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多