1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【iOS,Swift】上下左右の罫線を指定可能なCustomViewを作った(@IBDesignable)

Last updated at Posted at 2022-03-18

環境

  • Xcode 13.2.1
  • Swift 5.5.2

上下左右に罫線となるUIViewを配置したXibファイルを作る

制約は省きますが、↓画像のような、上下左右にWidth:5pxのUIViewを配置したXibファイルを作ります
(わかりやすいように上下左右の罫線はそれぞれ別の色にしてます)

※このXibのファイル名は「DesinableBorderView.xib」としてます。

スクリーンショット 2022-03-18 17.32.08.png

Xibファイルに対応したCustomViewクラスを作成する

コードそのまま載せます。
ポイントとしては、上下左右の表示・非表示を設定ができる、BoolのIBInspectable を作ったことです。

import UIKit

@IBDesignable
class DesinableBorderView: UIView {

    /*
      IBOutletを引く時は、XibファイルのFile's Ownerにこのクラスを指定する
     */
    @IBOutlet weak var leftBorder: UIView!
    @IBOutlet weak var rightBorder: UIView!
    @IBOutlet weak var topBorder: UIView!
    @IBOutlet weak var bottomBorder: UIView!
    
    /// 左の線を描画するかどうか
    @IBInspectable var isHiddenLeft : Bool = true {
        didSet {
            if self.rightBorder != nil {
                self.leftBorder.isHidden = isHiddenLeft
            }
        }
    }
    /// 右の線を描画するかどうか
    @IBInspectable var isHiddenRight : Bool = true {
        didSet {
            if self.rightBorder != nil {
                self.rightBorder.isHidden = isHiddenRight
            }
        }
    }
    /// 上の線を描画するかどうか
    @IBInspectable var isHiddenTop : Bool = true {
        didSet {
            if self.topBorder != nil {
                self.topBorder.isHidden = isHiddenTop
            }
        }
    }
    /// 下の線を描画するかどうか
    @IBInspectable var isHiddenBottom : Bool = true {
        didSet {
            if self.bottomBorder != nil {
                self.bottomBorder.isHidden = isHiddenBottom
            }
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        loadNib()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        loadNib()
    }
    
    override func prepareForInterfaceBuilder() {
        // StoryBoard上でリアルタイムに反映する用
        super.prepareForInterfaceBuilder()
        loadNib()
    }
    
    func loadNib() {
        NSLog("loadNib")
        let bundle = Bundle(for: type(of: self))
        let nibName = String(describing: DesinableBorderView.self)
        let view = UINib(nibName: nibName, bundle: bundle).instantiate(withOwner: self, options: nil).first as! UIView
        view.frame = self.bounds
        addSubview(view)
    }
}

このファイルを作成したら、Xibファイルのほうに戻って、FilesOwnerやIBOutletを引くと、
≡みたいなアイコンのタブに、IBInspectable の選択肢が出ると思います。

スクリーンショット 2022-03-18 17.44.54.png

「Is Hidden Left」をONにすれば、左の罫線を非表示できます。
「Is Hidden Left」をOFFにすれば、左の罫線を表示できます。
(ほかの方向も同じです)

最後に

需要があるかわかりませんが、
罫線を引くのにプログラムでいちいちやらなきゃいけなくてめんどくて、
IBDesignable でリアルタイムで見れるようなやつを作りました。

1
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?