繁体   English   中英

iOS-缺少导航流程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM