Подтвердить что ты не робот

IOS: сделать segue ждать успеха входа в систему

Я разрабатываю приложение iOS, используя функцию раскадровки XCode 4.2. Приложение имеет экран входа в систему, который использует имя пользователя и пароль и имеет кнопку для входа в систему. Нажатие кнопки входа в систему вызывает нажатие кнопки переключения на другой контроллер. Тем не менее, я хочу, чтобы секундомер дождался, когда логин вернется успешно, прежде чем перейти к следующему контроллеру.

Я знаю о prepareForSegue:sender:, но это моя проблема: вход в систему асинхронен. Поэтому я не могу выполнить вход в систему.

Есть ли что-то вокруг этого? Могу ли я создать секу в раскадровке, которая запускается только тогда, когда я хочу, чтобы она была (в отличие от нажатия кнопки)?

4b9b3361

Ответ 1

Хорошо, я понял это. Я определил segue от UIButton до следующего UIViewController. Как определено таким образом, нет возможности условно выполнить segue.

Вместо того, чтобы наложить кнопку на кнопку, я сделал переход от первого UIViewController к другому UIViewController. Это определяет segue, но не связывает с ним никаких действий. Оттуда я могу просто вызвать performSegueWithIdentifier:sender:, когда я хочу, чтобы этот процесс выполнялся (в моем случае это когда задача async завершена).

Главное преимущество этого для меня в том, что IB сохраняет свою структуру.

Большое спасибо @cli_hlt за то, что указали мне в правильном направлении (+1).

Ответ 2

Я не знаю, есть ли способ в IB выполнить такое действие (хотя я сильно сомневаюсь в этом), поэтому я предлагаю использовать

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender

на контроллере представления, когда ваш асинхронный вход в систему имеет успех.

Ответ 3

Вы также можете вызвать метод instantiateViewControllerWithIdentifier на экземпляре UIStoryBoard. Это вернет ссылку диспетчера представлений на любую точку вашего раскадровки. Оттуда вы можете представить его, как вам нравится, и он подберет поток вашей раскадровки.