【swift】ちょい足しレシピ③!UILabelのtextが特定の文字だった場合にフォントを変えてみる

もくじ

毎度どうもこんにちは。iOSをメインに開発しているロッキーカナイです。

今回のちょい足しレシピは、UILabelのtextが特定の文字だった場合にフォントを変えてみるお話です。
これUILabelだけでなくUITextFieldやUITextViewでも可能なので使えると思います。

今回は、アルファベットの時だけフォントを変えるようにします。

extension String {
    var isAlphabet: Bool {
        return range(of: "[^a-zA-Z ]", options: .regularExpression) == nil
    }
}

class AutoSwithingLabel: UILabel {
    let fontAlphabet = "Copperplate-Light"
    let fontOther = "HiraginoSans-W3"
    override var text: String? {
        willSet(t) {
            selectFont(t)
        }
    }
    
    private func selectFont(_ text: String?) {
        if let ret = text {
            let fontName = ret.isAlphabet ? fontAlphabet : fontOther
            self.font = UIFont(name: fontName, size: self.font.pointSize)
        }
    }
}

使い方は、こんな感じになります(storyboardは省略します)

class ViewController : UIViewController {
    @IBOutlet weak var label1: AutoSwithingLabel!
    @IBOutlet weak var label2: AutoSwithingLabel!
    
    override func viewDidLoad() {
        label1.text = "ABC"
        label2.text = "あいう"
    }
}

できました!
ちなみにUITextFieldやUITextViewで使用する場合は self.font.pointSize の所を修正すれば可能です。

関連する記事

もっと見る