如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewControlle
Posted
技术标签:
【中文标题】如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewController?【英文标题】:How can I dealloc manually UIViewController from another UIViewController in UINavigationController without import the first UIViewController class? 【发布时间】:2014-09-09 10:46:18 【问题描述】:我有一个导航控制器。第一个viewcontroller 是FirstViewController 的一种。当我在 FirstViewController 中点击一个按钮时,它会将第二个 viewController 推入 navigationController,它是一种 SecondViewController 类。当我点击 SecondViewController 中的按钮时,我想释放 FirstViewController(之前保存在 navigationController 中)以便重新开始,就好像我第一次在 SecondViewController 的 navigationItem 中点击返回按钮时打开 FirstViewController。这是我点击 secondViewController 中的按钮时调用的方法的代码:
NSArray * navigationPath = [self.navigationController viewControllers];
UIViewController *previousVC = [navigationPath objectAtIndex:[navigationPath count]-2];
[previousVC performSelector:@selector(viewDidUnload)];
它不会释放 FirstViewController。有办法吗?
【问题讨论】:
你不应该手动解除分配,当对象的保留计数减少到零时,运行时会调用对象的 dealloc 方法,并且不需要解除您的第一个视图控制器,(可能是) rootviewcontroller 你应该改变设计 【参考方案1】:创建一个新的第一个视图控制器
FirstViewController *first = [[FirstViewController alloc]init];
重置导航堆栈
[self.navigationController setViewControllers:@[first, self] animated:NO];
导航到第一个
[self.navigationController popViewController:YES];
【讨论】:
【参考方案2】:您需要在导航控制器中重置视图控制器数组。
在您的第二个视图控制器中:
[self.navigationController setViewControllers:@[self] animated:NO];
【讨论】:
这样,如果我点击返回按钮它什么都不做以上是关于如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewControlle的主要内容,如果未能解决你的问题,请参考以下文章
如何在不导入自定义小部件类包的情况下使用自定义小部件和 uic.loadUi?