У меня есть контроллер вида A, который имеет табличный вид и основан на выборе строки, я буду открывать другой контроллер вида B по модулю. У меня также есть таймер бездействия, реализованный для моего приложения. Теперь, когда B представлен и A представляет контроллер, и из-за неактивности пользователя, другой контроллер контроля неактивности View C будет открыт по модулю поверх B. Это означает, что у меня есть A, затем B поверх A и C сверху B. Теперь пользователь нажал кнопку из C, чтобы выполнить выход, и я могу отклонить только C. Но View Controller B никогда не отклоняется.Как отклонить контроллер модального представления, если имеется несколько контроллеров представления
Неактивность реализована с использованием события касания и уведомлений, а уведомление представляет собой неактивный контроль над моделями поверх текущего представления, как указано в приведенном ниже коде.
- (void) applicationDidTimeout:(NSNotification *) notif
{
NSLog(@"Application Did Timeout ...");
BCDSessionInactivityViewController *sessionView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"InactivityViewController"];
sessionView.modalPresentationStyle = UIModalPresentationFormSheet;
sessionView.preferredContentSize = CGSizeMake(838,340);
UIViewController *parentController = self.parentViewController;
NSLog(@"presenting view controller is %@", [parentController class]);
[[self topViewController]presentViewController:sessionView animated:YES completion:nil];
}
- (UIViewController *)topViewController{
return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}
- (UIViewController *)topViewController:(UIViewController *)rootViewController
{
if (rootViewController.presentedViewController == nil) {
return rootViewController;
}
if ([rootViewController.presentedViewController isMemberOfClass:[UINavigationController class]]) {
UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
UIViewController *lastViewController = [[navigationController viewControllers] lastObject];
return [self topViewController:lastViewController];
}
UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;
return [self topViewController:presentedViewController];
}
Есть ли способ, которым я могу отменить диспетчер B также?
In View Controller C method, где я отклоняю контроллер просмотра C, я редактирую код в соответствии с предложением, но View Controller B по-прежнему не отклоняется.
- (IBAction)logoutbtn:(id)sender
{
NSLog(@"logout is called");
if ([self.presentingViewController isKindOfClass:[BCDScanReviewViewController class]] || [[[F7CheckScanner instance]checkFrontScanned] isEqualToString:@"checkFrontScanned"])
{
NSLog(@"check front scanned %@",[[F7CheckScanner instance]checkFrontScanned]);
[[F7CheckScanner instance]scanBackOfCheckNoData];
}
[sessionTimer invalidate];
sessionTimer = nil;
[[BCDTimeManager sharedTimerInstance]stopIdleTimer];
[self dismissViewControllerAnimated:YES completion:^(){
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:^(){;
BCDThankYouViewController *thankuView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThankyouView"];
[[self topViewController ]presentViewController:thankuView animated:YES completion:nil];
}];
}];
UIViewController *parentController = self.presentingViewController;
NSLog(@"presenting view controller is %@", [parentController class]);
// [self dismissViewControllerAnimated:YES completion:^() {
// [parentController performSegueWithIdentifier:COMMON_VC_TO_THANK_YOU_VC sender:self];
// }];
}
Поскольку вы используете NavigationController, вы можете использовать 'unind' segue. См. Ответ [здесь] (http://stackoverflow.com/a/17607083/2535467). – CaptJak
Используйте блок завершения метода rejectViewControllerAnimated, в котором вы можете снова вызвать rejectViewControllerAnimated для ViewController B. – iamyogish
@iamyogish; Я редактировал вопросы, не работая в соответствии с предложением. Вы видите, что я делаю что-то неправильно – Nitya