[objective-c]iOS-导航流是错过了

发布时间: 2016/10/2 5:08:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在我的应用程序中添加子视图控制器使用下面的代码。

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];

它运作良好。但是,然后卸下子视图控制器后,我不能做任何动作在父视图控制器。我觉得我失去一些东西导航流。请帮我。

解决方法 1:

只是获取数组中的所有 Viewcontrollers,看看这个。

如果你想要的导航,所有视图控制器

NSArray *currentControllers = self.navigationController.viewControllers;

如果你想第一 pushedviewcontroller

UIViewController *firstcontroller = self.navigationController.viewControllers.firstObject;

如果你想要的最后一个对象,

UIViewController *Lastcontroller = self.navigationController.viewControllers.lastObject;

现在这段代码,您要删除的 viewcontroller 的跟踪。

或另一种方式是只给你 parentviewcontroller 在标识符 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];

我希望这足够的信息来解决您的问题。

赞助商