iOS: заставить переход ждать успешного входа в систему

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

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

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


person mtmurdock    schedule 19.11.2011    source источник


Ответы (3)


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

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

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

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

person mtmurdock    schedule 21.11.2011
comment
Это сработало отлично, спасибо! Я даже не знал, что можно подключить контроллер :) Гораздо более простое решение! - person MagentoMan; 11.01.2019

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

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

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

person cli_hlt    schedule 19.11.2011
comment
Да, я видел это, я просто надеялся, что будет какой-то способ сделать это, где мне не придется прерывать поток в IB. - person mtmurdock; 21.11.2011

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

person Scott Ahten    schedule 30.11.2011
comment
Хотя в IB этого не будет. Я пытался сохранить блок-схему на раскадровке. То, что вы предлагаете, не будет показывать связь между двумя контроллерами в IB. Если вы прочитаете мой ответ, вы увидите, как я смог сделать то же самое, что вы предлагаете, используя IB для определения перехода. Спасибо за отзыв! +1 - person mtmurdock; 04.12.2011