之前使用TableView的時候都是繼承UIViewController,然后繼承兩個delegate,如下面的代碼。
@interface SomeViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
這篇文章《如何使用UITableView》講述了我怎樣使用TableView。最近想使用iOS6的 UIRefreshControl,不幸的是這個UIRefreshControl 只能使用在UITableViewController里面,不能支持UIViewController。Thanks Apple, make things more difficult. 因此我不對不把UIViewController改成UITableViewController。
這篇文章講述了兩者的區別。
http://www.iosdevnotes.com/tag/uitableviewcontroller/
UIViewController vs UITableViewController
The class that implements the delegate methods is almost always the view controller that owns the table view. What should that class be? Most view controllers are usually subclasses of UIViewController, but iOS also provides a UITableViewController.
UITableViewController only provides a few features on top of UIViewController:
- UITableViewController has a tableView property built-in that points to its table view.
- UITableViewController will automatically make itself the data source and delegate, unless you specifically change it.
- The UITableViewController will reload the table view’s data the first time it’s loaded. It will also clear any selected rows whenever the table view is displayed.
- After the table view appears, it will flash the table view’s scroll indicators. This is a hint to the user that there’s more data than they currently see on the screen.
- If there’s a navigation bar with an Edit/Done button, the UITableViewController will hook it up to toggle the edit mode of the table view.
Basically, it saves a little bit of time by automatically implementing some common and expected code. If you don’t want any of this behavior, you can always do it yourself within a UIViewController. Just remember to manually implement the steps listed above yourself, if you still want them. You might have seen apps where you select a row from a table, go to a new screen, and when you come back the row is still highlighted. This is usually a sign that someone used a UIViewController with their table view and forgot to clear the selection .
The most common times when I don’t use a UITableViewController in my apps is usually when the view controller needs extra functionality beyond just a table view. Perhaps I want the table view nested inside another view, for example. Usually though, you can use a UITableViewController, as we do in the example below.
A helpful hint: if you’re creating a new view controller though Xcode (like under File -> New -> New File…), you can select “UIViewController subclass”, and then on the next screen, choose “UITableViewController” from the “Subclass of” drop down.
看起來UITableViewController更加方便,但是我喜歡UIViewController 的靈活性。對於使用UIRefreshControl的需求,我也別無選擇,不得不改成UITableViewController。把Storyboard了頁面重新做一遍,重新寫ViewController類。