弹出一个没有发布的viewController

时间:2013-11-27 02:59:54

标签: ios iphone

人们,我想使用NavigationView控制器上的常规后退按钮弹出一个viewController,而不释放用户创建的自定义视图,任何人都知道某种方法吗? 因为导航控制器的自然流动是释放“poped”viewController!谢谢你的帮助!

5 个答案:

答案 0 :(得分:2)

您需要在其他位置保留视图控制器的副本。也许在包含导航控制器的类中。然后在需要时将其推回到堆栈上。

另外,请查看UINavigationControllerDelegate

答案 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>