objective-c - 如何使用 Completion Handler 范例创建自定义 NSAlert Sheet 方法

标签 objective-c objective-c-blocks nsalert

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

根据我所了解的文档,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] 不允许我在方法结束时更新或返回值。我知道为什么,但有没有一种我没有想到的方法来实现这一目标。

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

谢谢 三重

最佳答案

假设调用 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完成 block 。

关于objective-c - 如何使用 Completion Handler 范例创建自定义 NSAlert Sheet 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23251464/

相关文章:

objective-c - Xcode cocoa applescript 应用程序中的日期命令存在问题

ios - UITableViewCellAccessoryCheckmark 未在 iOS 7 中显示

ios - UIDocumentPickerViewController文件已禁用?

ios - 从 C 调用 Swift 闭包时出现 EXC_BAD_ACCESS 异常

cocoa - 在 NSAlert 上打开新窗口

ios - 如何修复与 sizeWithFont 和 drawAtPoint 相关的折旧警告?

objective-c - 复制 block - 复制原始类型的捕获变量

ios - 多次调用 block 显示 View 中的 UIAlertView

swift - 将文件移动到我自己的应用程序中存在同名文件的目录时,是否可以使用 Finder 提供的警报?