我已经将这个简单的通用方法用于了一段时间,它适用于基于应用程序的对话框,但是我希望在工作表样式对话框中使用相同的功能,而且我很难将它们组合在一起。
根据我理解的文档,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]不允许我更新或返回方法结尾的值。我知道为什么,但是有一种方法我不想做到这一点。
请告诉我如何创建一个类似于我用于表格的方法。
由于 三重
答案 0 :(得分:6)
假设调用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 完成块。