Mat*_*key 12 iphone cocoa-touch subclass uikit subclassing
我目前正在建设一个选项卡式iPhone应用程序,其中每个选项卡的视图控制器是一个实例UINavigationController,并且其中每一个的每个子控制器UINavigationController实例是一个实例UITableViewController.理想情况下,我想子类化,UINavigationController以便每个选项卡的控制器是UINavigationController的子类(UINavigationController显然,除了具有所有标准功能外)还充当与其子控制器关联的每个表视图的数据源和委托. .试图这样做似乎打破UINavigationController了子类中的基本功能.
看到苹果公司在他们的iPhone文档中说一个人不应该是子类UINavigationController,而且当一个人做的时候事情似乎就会破裂,我想知道如何在UINavigationController's不进行子类化的情况下扩展功能,一般来说,如何解决子类化限制时的问题.做可可开发.
谢谢!
U62*_*U62 21
为什么你希望它UINavigationController作为表的数据源呢?重点UITableViewController在于您将其子类化,并且它还充当了UITableView它也放置在父视图中的数据源.
Ken*_*ner 10
我将继续说你的想法有一些优点,如果在每个级别你真的使用相同类型的数据,并且每个级别可能有一个不同的委托来处理单元格创建.
基本上没有理由你不能将UINavigation控制器子类化为在它上面添加一个完全正交的数据层,因为它与UINavigationController管理的UI或行为无关(苹果担心这将是你将要搞砸的).对于那些反对这个想法的人,把它想象成一个每个标签的数据存储,标签中的所有页面都可以访问,而不是系统中的每个页面都必须转到AppDelegate,或者有一堆单例.好吧,基本上它是一个单身,但至少有一个已经存在,并自动传递参考.
总而言之,我将以另一个设计方案结束 - 我认为您可能想要做的是深入研究多个层,重复使用相同的代码来生成单元格,因为每层都有相同类型的数据.处理这种情况的一种更好的方法是让一个视图控制器提供要显示的数据子集,当用户向下钻取它时,只需用该新的数据子集创建同一视图控制器的另一个实例.这种方法比让导航控制器充当每个级别的表委托更好,因为你必须做大量的重新布线来回移动,并且需要更多的工作来记住每个级别的滚动位置级别启动.这就是为什么你想要使用多个视图控制器实例来保持钻取,但是多个实例不一定意味着多个类.
Rem*_*hem 10
供参考,请注意,自iOS 6起,UINavigationController可以合法地进行子类化.
此类通常按原样使用,但可以在iOS 6及更高版本中进行子类化. UINavigationController类参考
当然,这并不意味着你应该永远.但是你可以.