iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 使用自定义segue在导航堆栈上向后移动大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将我的应用程序移动到故事板,到目前为止,非常好.

但是,我发现了一些我不太懂的东西,让我担心.如果有人能对此提供一些见解,我将不胜感激.

我的应用使用普通的导航控制器.为了“向前”移动到新的视图控制器,我使用自定义segues;没有问题.但是,应用程序中有一点我要回到导航堆栈的开头.我还使用自定义segue配置了“导航”,为此,我通过将最后一个视图控制器拖到第一个(对我来说已经很奇怪)在Interface Builder中创建了segue,并且我实现了自定义segue以下列方式执行方法

-(void)perform
{
    UIViewController *src = (UIViewController *)self.sourceViewController;
    UIViewController *dest = (UIViewController *)self.desTinationViewController;

    [src.navigationController popToRootViewControllerAnimated:NO];
    // Custom animation code here
}

……@L_874_7@很好.但是,我不明白为什么会这样.在我看来,自定义segue应该实例化我的第一个视图控制器的新实例并将其指定为“dest”,但看起来segue足够聪明,可以实现我想要导航到之前存在的实例View Controller,而不是创建一个新实例,它分配给现有的“dest”.

有人知道以这种方式使用segue是否可以?它有可能是偶然的,但可能会在将来停止工作吗?我是不是在浪费内存,因为Segue正在实例化一个不打算使用的View Controller?

非常感谢提前!

解决方法

>

  
  是的先生!通过使用segue,您可以有效地分配一个新的视图控制器,因为它需要为您的自定义segue设置DesTinationController属性.自己测试:在你的根控制器中添加一个静态计数器,每次初始化这个类时都会增加它,并在你的视图中显示它:每当你使用这个技巧弹出到root时,你会看到它会增加.

>

  
  只要你有效地浪费记忆,不!

这个问题至少有一个解决方案:在你的(void)执行实现中释放segue的DesTinationController.这真的很快实现,但有点丑,因为你每次都分配并立即释放你的视图控制器……即使它比泄漏更好,也不是我称之为好的做法!
在我看来,实现你想要的更好的方法是不使用segue进行转换,只是使用按钮或其他任何东西并调用popToRootViewController:触摸此按钮时动画.

>

    对于我建议的第一个解决方案和你目前的方式,我认为没有理由:这些都不是复杂的调整,只是“糟糕实施”的标准导航.第二种解决方案完全正常,所以不用担心.

大佬总结

以上是大佬教程为你收集整理的ios – 使用自定义segue在导航堆栈上向后移动全部内容,希望文章能够帮你解决ios – 使用自定义segue在导航堆栈上向后移动所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。