LoginSignup
3
5

More than 5 years have passed since last update.

[swift3.0]UserDefaultsを使って、tableviewで表示されるセルの内容を保存する機能を作る。

Last updated at Posted at 2017-01-24

はじめに

userDefaultsを使って、tableViewに表示されている記事を、保存する機能を実装する機会があったので、備忘録として載せます。

2017-01-24 9.14.41.png

大まかな流れ

1.tableViewを表示(お気に入りボタン付き)
2.お気に入りボタンタップ時のセル番目を獲得。
2-2.タップしたセルが持つDicを、空宣言した配列に納入
2-3.その配列をuserDefaultsに、セットする。
3.別のViewで、userDefaultsから取り出し、tableViewで表示。

1.tableViewを表示(お気に入りボタン付き)

PropertyList.plist を作成し、tableViewに表示させます。
2017-01-24 7.40.14.png



class TableViewController: UIViewController {

    @IBOutlet weak var TableView: UITableView!

    let ud : UserDefaults = UserDefaults.standard
    var favoriteListArr :[[String : String]]=[[:]]

    var plistArr = [Dictionary<String, String>]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let path = Bundle.main.path(forResource: "PropertyList", ofType: "plist")
        plistArr = NSArray(contentsOfFile: path!) as! [Dictionary<String, String>]


    }
}

extension TableViewController: UITableViewDataSource , UITableViewDelegate {

    //行数指定
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return plistArr.count
    }


    //表示内容
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
        cell.Title.text = plistArr[indexPath.row]["title"]
        return cell
    }

}


2.お気に入りボタンタップ時のセル番目を獲得。



    //最上部の画像に登場する星型の黄色ボタン
    @IBAction func favoriteYellowBtn(_ sender: Any) {

        let btn = sender as! UIButton
        //タップした星型の黄色ボタンの行数とセルの行数が一致させる
        let cell = btn.superview?.superview as! TableViewCell

        //星型ボタンタップ時のセル番目を獲得
        let tappedRow = TableView.indexPath(for: cell)?.row

        let tableViewSelected = plistArr[tappedRow!]

        //タップしたセルが持つ辞書型を、空宣言した配列に格納
        favoriteListArr.append(tableViewSelected)
        //その配列をuserDefaultsに、セットする。
        ud.set(favoriteListArr as! Array, forKey: "favoriteListArr")
        ud.synchronize()

    }

3.別Viewで、userDefaultsから取り出し、tableViewで表示。



import UIKit

class FavoriteTableViewController: UIViewController {

    let ud : UserDefaults = UserDefaults.standard
    var favoriteListArr : Array<[String : Any]> = []


    override func viewDidLoad() {
        super.viewDidLoad()
        if var favorites = ud.array(forKey: "favoriteListArr") as! Array?{
            favorites.removeFirst()
            favoriteListArr = favorites as! Array<[String : Any]>
        }
    }


extension FavoriteTableViewController : UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return favoriteListArr.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UITableViewCell
        var favoriteListArrText = (self.favoriteListArr[indexPath.row] as! [String : String])["title"]
        cell.textLabel?.text = favoriteListArrText
        return cell
    }
}


おわりに

Xcodeさんから、
type any has no subscript members
とよく怒られました。型宣言はきっちりやります。m(__)m

もっと良い書き方あるよ!などございましたら、ご指摘お願い致しますm(__)m

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5