ViewControllerとUIをクラスで分離する方法 - Swift3.0

  • 0
    Like
  • 2
    Comment

    概要

    UIの定義がViewControllerに沢山書いてあると可読性が下がるので、UIを別のクラスに定義してViewControllerではaddSubviewするだけにしようと思いました。ViewControllerに書かれる行数が減って楽です。今回は、外部のクラス(.swiftのファイル)に定義したUISliderをViewControllerに呼び出して使いたいと思います。

    説明

    大まかな処理の流れはこんな感じ。まずclass UISliderStartEndを定義して、class UISliderStartEndの中にUISliderを引数として返す関数func makeSliderStartEndを作ります。

    ViewController内ではクラスをインスタンス化して使えるようにします。そのあとにaddSubviewの引数でインスタンス化したクラスの関数を実行します。返り値がUISliderを返すのでaddSubviewすることができます

    実装

    UISliderStartEnd.swift

    UISliderStartEnd.swift
    
    import Foundation
    import UIKit
    
    class UISliderStartEnd:UIViewController{
    
    
        func makeSliderStartEnd() -> UISlider {
    
            // スライダー
            let startPointSlider = UISlider(frame: CGRect(x:0, y:0, width:350, height:30))
            startPointSlider.layer.position = CGPoint(x:self.view.frame.midX, y:500)
            startPointSlider.backgroundColor = UIColor.white
            startPointSlider.layer.cornerRadius = 10.0
            startPointSlider.layer.shadowOpacity = 0.5
            startPointSlider.layer.masksToBounds = false
            startPointSlider.addTarget(self, action: #selector(self.onStartPointlabel(_:)), for: .valueChanged)
    
            // 最小値と最大値を設定する.
            startPointSlider.minimumValue = 0
            startPointSlider.maximumValue = 100        
            return startPointSlider
    
        }
    
        /*
         Sliderの値が変わった時に呼ばれるメソッド
         */
    
        @objc func onStartPointlabel(_ sender:UISlider!)
        {
            print(sender.value)
    
        }
    }
    

    ViewController.swift

    ViewController.swift
    
    //クラスをインスタンス化
    var UISliderStartEndInstance = UISliderStartEnd()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    self.view.addSubview(UISliderStartEndInstance.makeSliderStartEnd())
    }
    

    注意点

    下記のように、インスタンス変数を作る手間を端折って下記のように直接アクセスすると、Actionメソッドが動かないので、しっかりインスタンス変数は作りましょう。

    self.view.addSubview(UISliderStartEnd().makeSliderStartEnd())