もくじ
毎度どうもこんにちは。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 の所を修正すれば可能です。