2014-10-15 5 views
1

В моем приложении ios можно сказать, что у меня есть три ViewControllers: A, B и C.ios present view controller сразу после отклонения предыдущего

От 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, чтобы показать для бит (после увольнения), хотя я помещаю код представления в обработчик завершения увольнения. Что я могу сделать, чтобы этого избежать?

+0

Bro лучший способ сделать это в соответствии со мной будет путем добавления вашего B и C в качестве контроллера детского представления A, не представляя их в виде модально. Если хотите, я могу дать вам код. – iHulk

+0

Я использую этот механизм для обработки логина - так что A является контроллером корневого представления, который проверяет, вошел ли пользователь в систему. Если нет, он отображает вид входа (контроллер просмотра B). Как только пользователь войдет в систему, он затем отобразит C. –

+0

@iDeveloper покажет код ур и дайте понять, что означает u, имея дело с childviewcontrollers и как вы это делаете, не показывая A viewcontroller – iOSdev

ответ

2

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

+0

из-за устаревшего кода для меня все еще есть три контроллера вида. Но я изменил код действия, чтобы установить C в качестве корневого представления, и это гарантирует, что theres не задерживается –

-1
You can manage this by timeinterval 
like This way 

вы можете первым dissmiss мнение [самостоятельно увольнять];

-(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]; 
} 
+0

Это только что показало 'A' показываться на 2 секунды дольше? –

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