はじめに
Udemyにある【iOS12対応】未経験者が有名アプリ開発者になるiOS 12の全て 20個以上アプリをつくりプロになるという講座のTodoアプリに1つ新しい機能を加えました。
カスタムセルを加えてtodoだけでなく何時までにそのTodoを行うかも確認できるようにしてみました。
やりたいこと
- CostomCellを用いて1つのセルにつき2つの情報を表示する
- UserDefaultsに保存されているものを表示する
完成図
Cellを表示する側
viewDidLoadに使用するカスタムセルのクラスを登録する
デリゲートメソッドを宣言とカスタムセルのクラスを登録する
ViewController
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UINib(nibName:"CostomCellClass",bundle:nil), forCellReuseIdentifier: "Cell")
}
cellの中身はカスタムセル側のコードを見てねってことを書く
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{}は、セルに表示するものを記載するデリケートメソッド。
今回はカスタムセルに具体的に記載するので、ここにはカスタムセルを見てねってことを書く
ViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CostomCellClass
cell.cellDisplay(indexNum: indexPath)
return cell
}
カスタムセル側
StoryBordで表示するラベルを用意し関連付けを行う
必要な変数を宣言する
セルの中にあるテキストラベル2つと、UserDefaultsに保存されているデータを入れる変数を宣言する
UITableViewCell
@IBOutlet var todoLabel:UILabel!
@IBOutlet var timeLabel:UILabel!
var cellArray = [String]()
var cellTimeArray = [String]()
UserDefaultsの中身を取り出し配列に入れる
UITableViewCell
override func awakeFromNib() {
super.awakeFromNib()
cellArray = UserDefaults.standard.object(forKey: "todo") as! [String]
cellTimeArray = UserDefaults.standard.object(forKey: "time") as! [String]
}
セルの中身を記述するコードを書く
ViewControllerからこのメソッドは呼ばれる。
メソッド"cellDisplay"は具体的にカスタムセルの中にあるラベルに表示するものを書く
UITableViewCell
func cellDisplay(indexNum:IndexPath){
self.todoLabel?.text = cellArray[indexNum.row]
self.timeLabel?.text = cellTimeArray[indexNum.row]
}
最後に
かなりざっくり書いています。
また追記します。
間違っているところ,詳しく書いて欲しいところございましたらコメントお願いします。