[英]iOS - Navigational flow is missed
在我的应用程序中,我使用以下代码添加了子视图控制器。
self.onlineUserList = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"OnlineUserList"];
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:self.onlineUserList];
self.onlineUserList.delegate = self;
navController.navigationBar.hidden = YES;
CGRect aRect = [[UIScreen mainScreen] bounds];
[navController.view setFrame:(CGRect){0, 0, aRect.size.width, aRect.size.height-47}];
[self addChildViewController:navController];
[self.view addSubview:navController.view];
[self didMoveToParentViewController:navController];
我正在使用以下代码删除子视图控制器。
[_onlineUserList removeFromParentViewController];
[_onlineUserList.view removeFromSuperview];
[_onlineUserList didMoveToParentViewController:nil];
运行良好。 但是,删除子视图控制器后,我将无法对父视图控制器执行任何操作。 我想我缺少一些导航流程。 请帮我。
只需将所有Viewcontrollers放入数组中,请选中此复选框。
如果您要导航的所有视图控制器,
NSArray *currentControllers = self.navigationController.viewControllers;
如果您想先使用pushviewcontroller,
UIViewController *firstcontroller = self.navigationController.viewControllers.firstObject;
如果您要最后一个对象,
UIViewController *Lastcontroller = self.navigationController.viewControllers.lastObject;
现在,使用此代码跟踪您要删除的视图控制器。
或另一种方法是在didfinishlaunchwithoption中提供didfinishlaunchwithoption
,例如,
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
SlideMenu = [storyboard instantiateViewControllerWithIdentifier:@"SlideMenu"];
然后为topviewcontroller添加方法,
- (UIViewController *)topViewController{
return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}
- (UIViewController *)topViewController:(UIViewController *)rootViewController
{
if (rootViewController.presentedViewController == nil) {
return rootViewController;
}
if ([rootViewController.presentedViewController isKindOfClass:[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];
}
现在在您的appdelegate中再创建一个方法,以显示您的parentviewcontroller,例如
- (void)ShowMenu{
[SlideMenu ShowToViewController:[self topViewController]];
}
然后,当您删除childviewcontroller时,请调用,
[[AppDelegate mainDelegate] ShowMenu];
我希望此信息足以解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.