1

Я запускаю пользовательский NSWindowController в качестве модального окна.модальное окно не закрывается

Сначала я показываю это так:

ProgressWindow *pWin = [[ProgressWindow alloc] initWithWindowNibName:@"ProgressWindow" andXmlContent:nil];   
[NSApp runModalForWindow:[pWin window]]; 

И тогда я хочу, чтобы закрыть его изнутри NSWindowController в ProgressWindow в. Для этого я поставил в windowDidLoad функции следующего кода (только для проверки):

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; 
[self testMethod]; 

Как и ожидалось, он вызывает TestMethod через 2 секунды Метод должен закрыть модальное окно, но я, кажется, не найти способ сделать это. Я пробовал [NSApp stopModal], [NSApp abortModal], [self close], делая его листом и звонящим [self.window orderOut:nil];[NSApp endSheet:self.window];, но ничего не работает. Ничего не происходит, или окно снова открывается в другом месте. Я не знаю, почему это происходит, код инициализации вызывается только один раз.

Кто-нибудь знает, как его закрыть ???

ответ

-1

Я считаю, что вы используете RunLoop неверным образом. RunLoop - это цикл, который управляет отображением и взаимодействием виджетов GUI в вашем приложении, если вы остановите основное RunLoop, ваше приложение перестанет обновляться.

Поскольку вы используете runUntilDate, вы прекращаете обработку обновлений графического интерфейса с момента остановки основного RunLoop.

Для получения требуемой функциональности вы можете использовать addTimer для runloop или использовать отдельный NSTimer с селектором аргументов, инициирующим сообщение stopModal.

+0

Как сказано, это не проблема. testMethod вызывается через 2 секунды. Кроме того, runUntilDate делает обратное, он позволяет данному RunLoop работать в течение x секунд до того, как текущий поток продолжит работу. Предоставляя время для обновления GUI и выполнения методов взаимодействия. – Daniel

Смежные вопросы