ios – UIViewController和UITableViewController有什么区别?

前端之家收集整理的这篇文章主要介绍了ios – UIViewController和UITableViewController有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有时我想对一些应用程序广泛的自定义进行子类化UIViewController.例如.所有视图控制器应该在viewDidLoad或viewWillAppear中执行.

自然地,我将UIViewController子类化,并从那里继承,所有视图控制器都继承自此.但是一些控制器运行表.还有为此设计的UITableViewController.

所以我也分类UITableViewController,只是做同样的事情在那里.这似乎不是OOP术语中最聪明的事情.而且没有多重继承等

和UITableViewController继承自UIViewController …

现在我问自己为什么我不只是创建自己的表视图控制器,继承自己的视图控制器子类,并添加所有的表格.但是什么是“所有表的东西”?

> xcode添加到每个新的表视图控制器的框架代码.很方便,但可以轻松地转到代码段.
>有UITableViewDelegate和UITableViewDataSource协议的声明.随和.无论如何,这些方法的实现必须遵循UITableViewController的每个子类.
>协议中所有这些强制性方法可能有合理的默认实现.例如对于numberOfSectionsInTableView返回0或者对于titleForHeaderInSection返回0,或者对于heightForRowAtIndexPath,返回44.0f(不好的例子,可以更聪明地不执行)

所以尽管有明显的东西,UITableViewController有什么奇迹吗?

解决方法

我相信UITableViewController添加的所有行为在类文档: https://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html中都有很好的定义

The UITableViewController class creates a controller object that manages a table view. It implements the following behavior:

• If a nib file is specified via the initWithNibName:bundle: method (which is declared by the superclass UIViewController),UITableViewController loads the table view archived in the nib file. Otherwise,it creates an unconfigured UITableView object with the correct dimensions and autoresize mask. You can access this view through the tableView property.

• If a nib file containing the table view is loaded,the data source and delegate become those objects defined in the nib file (if any). If no nib file is specified or if the nib file defines no data source or delegate,UITableViewController sets the data source and the delegate of the table view to self.

• When the table view is about to appear the first time it’s loaded,the table-view controller reloads the table view’s data. It also clears its selection (with or without animation,depending on the request) every time the table view is displayed. The UITableViewController class implements this in the superclass method viewWillAppear:. You can disable this behavior by changing the value in the cleaRSSelectionOnViewWillAppear property.

• When the table view has appeared,the controller flashes the table view’s scroll indicators. The UITableViewController class implements this in the superclass method viewDidAppear:.

• It implements the superclass method setEditing:animated: so that if a user taps an Edit|Done button in the navigation bar,the controller toggles the edit mode of the table.

所有这些都是行为,如果它们适用于您的特定控制器和表视图,应该很容易重新实现.

一般来说,我发现自己最好实现这些行为,以便允许替代继承层次结构,因为我注意到,因为我通常会考虑将表视图的delagate和datasource都设置为视图控制器的设计气味.这些是独立的关注,通常可以并且应该由其他类别处理(例如,用于特定模型类的专用数据源),而不是使视图控制器膨胀.

原文链接:https://www.f2er.com/iOS/328643.html

猜你在找的iOS相关文章