ios представляет контроллер представления сразу после закрытия предыдущего

Допустим, в моем приложении iOS есть три ViewControllers: A, B и C.

От A я представляю B и назначаю A делегатом. После выполнения действия B я хочу отклонить B и представить C от A. Однако я хочу сделать это так, чтобы A вообще не отображалось на экране. Это мой код прямо сейчас, внутри класса A:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    B *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"B-identifier"];
    vc.delegate = self;
    [self presentViewController:vc animated:NO completion:^{}];

}

Тогда это функция делегата внутри A, которую B вызывает при выполнении действия:

- (void) actionPerformed
{
    [self dismissViewControllerAnimated:YES completion:^{
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
}];

Однако это приводит к тому, что C появляется на некоторое время (после вызова отклонения), даже несмотря на то, что я помещаю код представления в обработчик завершения отклонения. Что я могу сделать, чтобы избежать этого?


person Atul Bhatia    schedule 15.10.2014    source источник
comment
Братан, лучший способ сделать это, по моему мнению, - добавить ваши B и C в качестве дочернего контроллера представления A, а не представлять их модально. Если хочешь, я могу дать тебе код.   -  person iHulk    schedule 15.10.2014
comment
Я использую этот механизм для обработки входа в систему, поэтому A является корневым контроллером представления, который проверяет, вошел ли пользователь в систему. Если нет, он отображает представление входа (контроллер представления B). Как только пользователь войдет в систему, он покажет C.   -  person Atul Bhatia    schedule 15.10.2014
comment
@iDeveloper покажите ваш код и дайте понять, что вы имеете в виду, имея дело с дочерними контроллерами просмотра, и как вы это делаете, не показывая контроллер представления.   -  person iOSdev    schedule 15.10.2014
comment
@NarasimhaiahKolli, вы можете перемещаться между двумя дочерними контроллерами, используя метод [self transitionFromViewController: toViewController: продолжительность: параметры: анимация: завершение:] в вашем родительском классе. Надеюсь, ты меня понял, братан.   -  person iHulk    schedule 15.10.2014
comment
@iDeveloper Спасибо .. Это очень помогает.   -  person iOSdev    schedule 15.10.2014


Ответы (2)


Если вы используете его для входа в систему, вам следует попробовать другой подход. Я имею в виду, если A является вашим rootViewController (сделайте его контроллером входа в систему), который проверяет, есть ли у пользователя сеанс или нет. предположим, что у пользователя есть сеанс, затем сделайте свой C viewController как rootViewController, используя [[[[UIApplication sharedApplication] delegate] window]setRootViewController:], и если у него нет сеанса, покажите ему ту же страницу (A viewController), нет необходимости в B. Просто попробуйте, может быть, это улучшит производительность вашего приложения.

person iHulk    schedule 15.10.2014
comment
из-за устаревшего кода мне проще иметь три контроллера представления. Но я изменил код действия, чтобы установить C в качестве корневого представления, и это гарантирует отсутствие задержки. - person Atul Bhatia; 15.10.2014

You can manage this by timeinterval
like This way

вы можете сначала отклонить представление [самоотклонение];

-(void)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSelector:@selector(present) withObject:nil afterDelay:2.0];
}
-(void)present
{
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
}
person Anand    schedule 15.10.2014