通过导航控制器调用自定义加载方法

时间:2014-01-27 21:43:06

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

这个问题是两个问题,我看过但是却找不到类似的问题,但也许我只是不知道具体要搜索什么。

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

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

对于文字墙感到抱歉,任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

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

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

对于问题二,您如何创建它们完全是个人偏好。您可以创建自定义init方法,也可以只设置为配置视图控制器而设置的属性。如果您正在使用自定义容器视图控制器,则需要使用某种类型的init初始化它们,或者如果您使用的是故事板,则可以调用instantiateViewControllerWithIdentifer:获取一个实例。