我决定使用带有 2 个按钮的警报表。当用户单击“继续”按钮时,应该会落下由窗口制成的纸张。该工作表下降,父窗口与另一工作表一起关闭。我使用的代码是:
- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(int *)contextInfo
{
if (returnCode == kOkayButtonCode) {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString *status = [defaults objectForKey:@"userStatus"];
if (status == @"NO") {
[NSApp beginSheet:theSheet modalForWindow:window
modalDelegate:self didEndSelector:NULL contextInfo:nil];
}
if (status == @"YES") {
}
}
if (returnCode == kCancelButtonCode) {
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.45];
}
}
有人能看出这个问题吗?
最佳答案
找到了使用计时器的解决方法。
- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(int *)contextInfo
{
if (returnCode == kOkayButtonCode) {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString *status = [defaults objectForKey:@"userStatus"];
if (status == @"NO") {
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0.45];
NSTimer *theTimer = [[NSTimer alloc] initWithFireDate:date
interval:1
target:self
selector:@selector(startSheet:)
userInfo:nil repeats:NO];
NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:theTimer forMode: NSDefaultRunLoopMode];
[timer2 release];
}
if (status == @"YES") {
}
}
if (returnCode == kCancelButtonCode) {
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.45];
}
}
- (void)startSheet:(NSTimer *)theTimer {
[NSApp beginSheet:theSheet modalForWindow:window
modalDelegate:self didEndSelector:NULL contextInfo:nil];
}
关于cocoa - 从警报中调用工作表会导致奇怪的窗口问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579727/