Eurekaを使わずに簡単に設定画面を作る | iOS

![on.gif](https://qiita-image-store.s3.amazonaws.com/0/135794/f0753950-625b-3eaa-9097-507632b1b20a.gif)

# 環境

- swift3
- xcode8
- UserDefaults

# 説明

Eurekaを使わないでiOSの設定画面をswiftを用いて作っていきます。UserDefaultsを使って永続化処理も実装しています。

# ソース

[GitHub](https://github.com/Ryosuke-Hujisawa/setting-ios-swift3)

# 実装

<img width="338" alt="スクリーンショット 2017-07-23 10.19.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/135794/d72f022a-f9ec-b9a6-0452-e2ce9d11f2b5.png">

```swift


import UIKit

var testToggle = "testToggleOn"
var testToggle02 = "testToggle02On"

//配列の実装
var TableTitle = [ ["MainTitle01", "Title01", "Title02", "Title03", "Title04"],
                   ["MainTitle02", "Title05", "Title06", "Title07"],
                   ["MainTitle03", "Title08"]
                 ]
var TableSubtitle = [ ["", UserDefaults.standard.string(forKey: SettingList.appleValue), "subtitle03", "subtitle04", "subtitle05"],
                      ["","subtitle05","subtitle06" , "subtitle07"],
                      ["", "subtitle08"],
                 ]

//永続化実装
enum SettingList: CustomStringConvertible {

    case testToggleCase
    //未使用
    case testToggleCase02
    static var appleValue: String = testToggle
    static var testToggleCase02Value: String = testToggle02
    var description: String {
        switch self {
        case .testToggleCase:
            return SettingList.appleValue
        case .testToggleCase02:
            return SettingList.testToggleCase02Value
        }
    }
}

//クラス
class SettingViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        //ユーザーデフォルト読み込み
        if (UserDefaults.standard.string(forKey: SettingList.appleValue) != nil) {
            print("データ有り")
            testToggle = UserDefaults.standard.string(forKey: SettingList.appleValue)!
        }else {
            print("データなし")
            UserDefaults.standard.set(testToggle, forKey: SettingList.appleValue)
        }
    }

    
    override var prefersStatusBarHidden: Bool {
        return true
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    
    func numberOfSections(in tableView: UITableView) -> Int {
        return TableTitle.count
    }
    
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return TableTitle[section].count - 1
    }
    
    
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "cell")
        cell.textLabel?.text = TableTitle[indexPath.section][indexPath.row + 1]
        cell.detailTextLabel?.text = TableSubtitle[indexPath.section][indexPath.row + 1]
        return cell
    }
    
     func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return TableTitle[section][0]
    }

     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     tableView.deselectRow(at: indexPath, animated: true)

        if indexPath.section == 0 {
            if(indexPath.row == 0){

                testToggle = (testToggle == "testToggleOff") ? "testToggleOn" : "testToggleOff"
                UserDefaults.standard.set(testToggle, forKey: SettingList.appleValue)
                
                //読み込み
                print( UserDefaults.standard.string(forKey: SettingList.appleValue)! )
                print( testToggle )
                
                TableSubtitle[0][1] = UserDefaults.standard.string(forKey: SettingList.appleValue)!
                
                //テーブル更新
                DispatchQueue.main.async{
                    self.tableView.reloadData()
                }
            }
        }
        print("タップされたセクションの中のセルのindex番号: \(indexPath.row)")
        print("タップされたセクションのindex番号: \(indexPath.section)")
    }
}



```

# 参考

[Eurekaを使わずに簡単に設定画面を作る | iOS](http://off.tokyo/blog/2017/07/23/eureka%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%AB%E8%A8%AD%E5%AE%9A%E7%94%BB%E9%9D%A2%E3%82%92%E4%BD%9C%E3%82%8B-ios/)