UIViewController + UITableView


■UITableViewControllerからUIViewController+UITableViewへ

今作っているアプリ。
当初UITableViewControllerを使って実装していたのだが、ナビゲーションバーとテーブルの間に広告を表示させるようにしたかった。
方法を模索するもどうやらUITableViewControllerで作ったUITableViewのframeは自由に変更できないような感じ。
そこで仕方なくUITableViewControllerを使わないようにして、UIViewControllerの派生クラスにUITableViewのインスタンスを持たせるように変更した。

こちらのサイトを参考にさせて頂いた。

UIViewControllerをつかって、UITableViewControllerを実装する

■変更時につまづいた箇所

基本的には上記のサイトのように実装を変更した。
が、UITableViewを使うのが初めてでまったく理解できていないのでかなり苦戦。
ベースの知識が違い過ぎるんだよなぁ。

・インターフェイス部にUITableViewDataSource,UITableViewDelegateの二つのプロトコルを採用していることを宣言する必要がある

<UITableViewDataSource,UITableViewDelegate>

・delegateとdatasourceの設定が必要

self.tableView.delegate = self;
self.tableView.dataSource = self;

・storyboard上のUITableViewを削除
これだけやってなんとなく動いていると勘違いしてしまったが、シミュレータ上ではstoryboardの中で設置していたUITableViewが見えていてコードで追加した方のUITableViewが使われていなかったので、storyboardの方のUITableViewを削除。
そういえばコードで追加した方のUITableViewはframeも設定していなければaddSubviewもしていなかったのだった・・・(情けない><)
コードで書くのならこれもやんなきゃね。

・dequeueReusableCellWithIdentifier:を使うように変更
storyboardの方のUITableViewを削除した関係で、cellForRowAtIndexPathの中でdequeueReusableCellWithIdentifier:forIndexPath:を使っていた箇所をdequeueReusableCellWithIdentifier:を使うように変更。
dequeueReusableCellWithIdentifier:forIndexPath:の方は、実行前にUITableViewCellを作成しておく必要があったのね。

Important: You must register a class or nib file using the registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier: method before calling this method.

(※UITableView Class Referenceより)

こんな感じで無事動きました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です