Xcode
Swift
Udemy学習応援

[Swift]カスタムセルを用いて、UserDefaultsの中にあるものを表示する


はじめに

Udemyにある【iOS12対応】未経験者が有名アプリ開発者になるiOS 12の全て 20個以上アプリをつくりプロになるという講座のTodoアプリに1つ新しい機能を加えました。

カスタムセルを加えてtodoだけでなく何時までにそのTodoを行うかも確認できるようにしてみました。


やりたいこと


  • CostomCellを用いて1つのセルにつき2つの情報を表示する

  • UserDefaultsに保存されているものを表示する


完成図

スクリーンショット 2019-02-01 16.58.18.png


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")
}



  • カスタムセルのクラスを登録する
    スクリーンショット 2019-02-01 16.35.38.png


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

}



  • 使用するセルがどれなのか
    スクリーンショット 2019-02-01 16.41.29.png


カスタムセル側


StoryBordで表示するラベルを用意し関連付けを行う

スクリーンショット 2019-02-01 16.12.03.png


必要な変数を宣言する

セルの中にあるテキストラベル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]
}



最後に

かなりざっくり書いています。

また追記します。

間違っているところ,詳しく書いて欲しいところございましたらコメントお願いします。