Objective c 如何使用完成处理程序范例创建自定义NSAlert Sheet方法
我使用这个简单的通用方法已经有一段时间了,它对基于应用程序的对话框很好,但是我希望在工作表样式的对话框中使用相同的功能,并且我很难将它们组合在一起 据我所了解的文档,OS10.9及更高版本中唯一未被弃用的方法是在完成处理程序过程中使用NSAlert类。这似乎使得从通用方法返回Bool几乎不可能 我的代码:Objective c 如何使用完成处理程序范例创建自定义NSAlert Sheet方法,objective-c,objective-c-blocks,nsalert,Objective C,Objective C Blocks,Nsalert,我使用这个简单的通用方法已经有一段时间了,它对基于应用程序的对话框很好,但是我希望在工作表样式的对话框中使用相同的功能,并且我很难将它们组合在一起 据我所了解的文档,OS10.9及更高版本中唯一未被弃用的方法是在完成处理程序过程中使用NSAlert类。这似乎使得从通用方法返回Bool几乎不可能 我的代码: -(BOOL)confirm :(NSString*)questionTitle withMoreInfo:(NSString*)addInfo andTheActionButtonTitle
-(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]不允许我更新或返回方法末尾的值。我知道为什么,但有没有一种方法我没有想到去实现这一点
请告诉我如何创建一个类似于我用于图纸的方法
谢谢
Mie假设调用
确认:with moreinfo:的代码,并且从验证调用操作按钮:
-(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.
}];
}
您的其余代码需要在完成块内。这是一个很好的例子,但它不能解决在必须将代码放入块时调用常规对话框的问题。我想在用户按下保存按钮或删除按钮时调用与确认相同的方法。我的问题是必须在块中完成代码,而不是简单地返回confirmFlag。没有办法吗?我不这么认为。从以前的同步解决方案到当前的异步NSAlert需要重新考虑您的代码结构。我很担心。可以谢谢