人们,我想使用NavigationView控制器上的常规后退按钮弹出一个viewController,而不释放用户创建的自定义视图,任何人都知道某种方法吗? 因为导航控制器的自然流动是释放“poped”viewController!谢谢你的帮助!
答案 0 :(得分:2)
您需要在其他位置保留视图控制器的副本。也许在包含导航控制器的类中。然后在需要时将其推回到堆栈上。
答案 1 :(得分:0)
你可以将数据保存在“弹出”视图控制器中吗?当它再次出现时,填充它?弹出视图控制器时,应该将其释放。
答案 2 :(得分:0)
您可以在弹出自定义视图之前将navigation.viewControllers数组复制到全局数组中。在弹出视图后,全局navigation.viewControllers分配全局数组。
在AppDelegate中创建NSArray
appDelegate.nav = self.navigationController.viewControllers;
[self.navigationController popViewControllerAnimated:YES];
然后在poped视图中分配全局数组
-(void)viewWillAppear:(BOOL)animated
{
self.navigationController.viewControllers = appDelegate.nav;
}
答案 3 :(得分:0)
好的人回答是,从StoryBoard制作你的控制器,不要用segue来打电话。
if(comparacao == nil)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
comparacao = [storyboard instantiateViewControllerWithIdentifier:@"ComparacaoView"];
}
[self.navigationController pushViewController:comparacao animated:YES];
所以有了这个,我每次都使用创建的before实例,并且维护了我的用户在这个视图中所做的每件事。
答案 4 :(得分:0)
快捷代码:
@IBAction func pushButtonAction(_ sender: UIButton) {
if let exitingSecViewCon = secondViewController {
navigationController?.pushViewController(exitingSecViewCon, animated: true)
}else{
self.performSegue(withIdentifier: "second", sender: self)
}
}
var secondViewController: SecondViewController? //Keep Strong Pointer
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "second" {
if let sec = segue.destination as? SecondViewController {
sec.name = "ABC"
secondViewController = sec;
}
}
}
控制台日志:(SecondViewController的相同地址)
ADD=<RetainCount.SecondViewController: 0x7fb5ac630cf0>
ADD=<RetainCount.SecondViewController: 0x7fb5ac630cf0>
ADD=<RetainCount.SecondViewController: 0x7fb5ac630cf0>