LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-15

概要

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())
1
1
2

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
1
1