Разрешить приложению завершать работу, пока лист виден - PullRequest
4 голосов
/ 19 марта 2011

У меня есть лист, который прикрепляется к моему главному окну.Это лист входа в систему, который не должен допускать какого-либо взаимодействия с приложением до его завершения (модальное значение по умолчанию).ОДНАКО, я бы хотел, чтобы пользователь мог завершить приложение.IE, они понимают, что им нужно войти в систему, отказаться и хотят закрыть приложение.Поведение по умолчанию - играть в NSBeep и продолжать работать.Как я могу переопределить это?

Ответы [ 3 ]

6 голосов
/ 18 сентября 2014

Начиная с 10.6, вы можете контролировать, должен ли модальный лист препятствовать завершению приложения. Это должно сделать это:

[myModalSheet setPreventsApplicationTerminationWhenModal:NO];
1 голос
/ 19 марта 2011

Похоже, корень проблемы в том, что вы полагаетесь на лист, чтобы предотвратить взаимодействие с остальной частью приложения.Вы эффективно храните информацию о состоянии приложения (вошли в систему / не вошли в систему) в виде, и это не очень хороший план.

Лист должен позволять пользователю вводить информацию для входа в систему и контроллер листа входа в систему.должен обновить состояние приложения при вводе информации.Если вы воспользуетесь этим подходом, приложение не позволит пользователю делать что-либо, требующее входа в систему, до тех пор, пока процесс входа в систему фактически не будет завершен, независимо от того, есть лист или нет.

0 голосов
/ 19 марта 2011

Если вы позвоните по номеру endSheet: сразу после показа листа, он выдаст нужное мне поведение.

[NSApp beginSheet:self._loginController.window
   modalForWindow:self.window
    modalDelegate:nil
   didEndSelector:nil
      contextInfo:NULL];
[NSApp endSheet:self._loginController.window];

Это не уволит лист, и когда вы закончите, вы можетескрыть лист с помощью [window orderOut:nil];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...