317


UITableViewControllerを使って`cellForRowAtIndexPath`等を定義してtableを表示していましたが、
table以外のモノも表示したいためstoryboadでViewControllerの中にtableViewを配置したものに変更しました。

この場合、`self.tableView`に対して`cellForRowAtIndexPath`や`numberOfSectionsInTableView`はどうやって設定したらいいでしょうか？


CC BY-SA 3.0
2014-12-03T09:24:17.357
306
2014-12-04T10:07:41.507
525
question
ios tableview
iOSのUIViewControllerにtableViewを追加する場合


対象となるViewControllerで、`UITableViewDelegate`と`UITableViewDataSource`を実装すればいいと思います。

  * <https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UITableViewDelegate_Protocol/index.html>
  * <https://developer.apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UITableViewDataSource_Protocol/index.html>

その上で、

[code]

    @interface ViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    @end
    
[/code]

![アウトレットを定義](https://i.stack.imgur.com/9O89q.png)

とViewController.hにアウトレットをつなげたうえで、

![dataSourceとdelegateを設定](https://i.stack.imgur.com/7QnUq.png)

dataSourceとdelegateをViewControllerにすればいいと思います。


CC BY-SA 3.0
2014-12-03T14:04:14.203
317
2014-12-03T14:13:57.100
2014-12-03T14:13:57.100
351
351
306
answer


上の回答で尽きているが、UITableViewDataSourceというプロトコルが、それらのメソッドを規定している。
そのプロトコルを必要としているのは、UITableView. UITableViewは、それらのメソッドがどこにあるのか、しるのに、datasource
というプロパティを持っている

UITableViewControllerをstoryboardに貼りつけた場合や、UiTableViewControllerのサブクラス・ソースをxibつきで生成した場合、storyboardや、xibのなかに、フリーズドライされた形で、UITableViewに、datasource
の値が、設定されているので、この設定は、やる必要がない。

今回のようなことをやる場合、上の回答にある、datasourceを設定する以外に、

ViewController.h で、

[code]

    @interface ViewController: UIViewController <UITableViewDataSource>
    
[/code]

と、このViewControllerが、UITableViewDataSourceプロトコルを実装していることを明示する必要がある。


CC BY-SA 3.0
2014-12-04T02:45:25.167
337
2014-12-04T10:07:41.507
2014-12-04T10:07:41.507
75
75
306
answer