【问题标题】:Calling custom loading method through a Navigation Controller通过导航控制器调用自定义加载方法
【发布时间】:2014-01-27 21:43:05
【问题描述】:

这个问题是由两部分组成的,我已经查看过但没有找到类似的问题,但也许我只是不知道具体要搜索什么。

我有一个容器视图,它充当用户导航(具有其他选项,如保存),位于我的大部分UIViewControllers 的顶部。因此,每个视图都可以从其他视图访问。我遇到的问题是这会在UINavigationController 中创建循环,这是不建议的。我目前的尝试是删除除根 UIViewController 之外的所有内容,然后加载新的视图控制器。这不好,虽然它加载正常,但我的资产相当占用内存,因此从头开始加载它们或一次加载多个实例会占用太多内存。我将尽快减少资产大小以减少内存压力,但我仍然认为我这样做的方式非常糟糕且效率低下,因此我想知道一种更有效的方式来管理 UIViewControllers。

这个问题的另一部分是关于加载这些UIViewControllers。我有多种方法可以输入某些UIViewControllers,它们需要稍微不同的配置。我知道我可以使用特定的 init 方法手动加载UIViewController,或者我可以使用NSNotification 告诉班级做一些额外的初始化工作,但我想知道是否有更好的方法来做到这一点,并且如果没有更好的选择?

对不起,文字墙,任何建议表示赞赏。

【问题讨论】:

  • 你可以用你现有的创建视图改变 navigationviewcontroller.viewcontroller 然后用新的顺序再次添加它也删除一些视图控制器..

标签: ios objective-c memory-management uiviewcontroller uinavigationcontroller


【解决方案1】:

对于问题一,听起来您不应该使用 UINavigationController 作为容器视图控制器的基础。相反,您应该使用自己的自定义容器视图控制器。

如果您想查看自定义容器视图控制器的示例,或者只是使用一个更容易创建的类,您可以查看我在 GitHub 上的 CLFContainerViewController 类:https://github.com/cflesner/CLFContainerViewController

尚未更新以使用 iOS 7 提供的所有新动画选项,因此为过渡设置动画有点笨拙(尽管它为您提供了很大的灵活性)。不过它与 iOS 7 完全兼容。

对于问题二,如何创建它们完全是个人喜好。您可以创建自定义初始化方法,或者您可以只使用您设置的属性来配置视图控制器。如果您使用的是自定义容器视图控制器,您将需要使用一些 init 风格来初始化它们,或者如果您使用的是故事板,您可以调用 instantiateViewControllerWithIdentifer: 来获取一个实例。

【讨论】:

  • 哦,容器视图控制器不是一个 uinavigation 控制器,而是一个中介,就像在导航容器栏中点击一个按钮调用一个改变当前视图控制器的方法。抱歉,如果这看起来有点不清楚。
猜你喜欢
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2021-06-27
  • 2017-07-07
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多