2018/01/23

UITableViewをシンプルに実装する

コードからの作成は、サンプルコードから行っていたが、
ストーリーボードから行っていなかったので備忘録

https://i-app-tec.com/ios/tableview.html 
http://programming-beginner-memo.com/?p=15
より

objectライブラリからtableviewをViewにドラッグ

ストーリーボード上の処理の後は、tableviewを選択して、コードにoutlet接続するいつもの作業。

tableview cellをドラッグ

これは特に何も意識せずにストーリーボードのtableviewの上にドラッグすればok。
また、CellにはIdentifer(識別子)の設定が必須なので「tableCell」など適当に入力

UILabelやUIImageViewなどセルに盛り込みたいものをtableviewの上の階層に設定

これもストーリーボードでの設定。
後ほどインスタンスを生成する際にtagが設定するので重複しないように設定する。
UIImageとUILabel1, UILabel2の場合にはtagが1,2,3と設定する。
また、それぞれ設定したいイメージやテキストは事前に配列に入れて参照する

datasourceとdelegateを設定

これは参考にしたサイトで何故かうまくいかなかった部分。。
ストーリーボード上でtableviewとviewControllerでdatasourceとdelegateの接続。
参考にしたサイトでは、コード上は特に触れられていなかったが、何故かSIGABRTされてしまったため、
コード上でもUITableViewDataSourceとUITableViewDelegateを追加。
一応これでうまくいった。

またもう一方の参考サイトでは、逆にストーリーボード上での接続をせずに下記でうまくいった。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        tableView.dataSource = self    //追加
        tableView.delegate = self // 追加
        
    }
・・・略

これは単純なコードだったのでうまくいったのかわからないが、上の流れでやったところ、
Ambiguous reference to member ‘tableView(_:numberOfRowsInSection:)’
とエラーが出てしまった。

※ネットで調べても、回答としては「tableViewのoutlet接続してください」というところでそもそも
している状況なので、ちょっと原因は不明。

対処法としては、おそらくわかったので、原因は追々調べる。


お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!