прошивкой, чье мнение не в окне иерархии
В то время как я перемещаюсь с контроллера паролей на OTP ViewController, я получаю следующую ошибку в консоли:
Предупреждение: попытка представить on чье представление не находится в иерархии окон!
Это код, который я использую для переключения между представлениями:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
OTPViewController *lOTPViewController = [storyboard instantiateViewControllerWithIdentifier:@"OTPViewController"];
lOTPViewController.comingFromReg = true;
[self presentViewController:lOTPViewController animated:YES
completion:nil];
Я представляю контроллер паролей от RegistrationViewController:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
PassCodeViewController *passVC = [storyboard instantiateViewControllerWithIdentifier:@"PassCodeViewController"];
[self presentViewController:passVC animated:YES completion:nil];
3 ответа:
Это происходит из-за того, что два viewcontroller присутствуют и отклоняются одновременно, или вы пытаетесь представить ViewController сразу в viewcontroller open
ViewDidload
метод soПервый:
- присутствует ViewController из метода
viewDidAppear
или вместо методаViewDidload
.Второе:
Я предлагаю использовать метод завершения для present и dismiss viewcontrolelr следующим образом пример:
[self presentViewController:lOTPViewController animated:YES completion:^{ }];
Обновление:
Создайте отдельный метод представления OTPViewController следующим образом:
-(void)PresentOTPViewController { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; OTPViewController *lOTPViewController = [storyboard instantiateViewControllerWithIdentifier:@"OTPViewController"]; lOTPViewController.comingFromReg = true; [self presentViewController:lOTPViewController animated:YES completion:^{}]; }
Теперь вызовите этот метод с 1 секундой Delaya, используя
performSelector
[self performSelector:@selector(PresentOTPViewController) withObject:self afterDelay:1.0 ];
Вам нужно поместить выше performselect код в
[self dismissViewControllerAnimated:YES completion:^{ [self performSelector:@selector(PresentOTPViewController) withObject:self afterDelay:1.0 ]; }]; // this is the dismiss method of PassCodeViewController
T
Попробуйте представить его из rootViewController,
[self.view.window.rootViewController presentViewController:lOTPViewController animated:YES completion:nil];
Используйте следующую строку кода ..
// you need to create UIStoryboard object by giving name of your storyboard UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; // here you need to create storyboard ID of perticular view where you need to navigate your app UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewContIdentifire"]; // if use presentViewController this will not enables you to go back to previous view [self presentViewController:vc animated:NO completion:nil]; **// OR** // using pushViewController lets you to go back to the previous view [self.navigationController pushViewController:vc animated:YES];