概要

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())
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.