iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0

Xcode6開始導入了IBDesignableIBInspectable,讓開發者可以使用StoryBoard來改變使用程式碼建立的UI元件屬性,相當於延伸StoryBoard的功能,類似於User Defined Runtime Attributes
https://ithelp.ithome.com.tw/upload/images/20201010/20129144xhz8hslRPU.png


但是相對於User Defined Runtime AttributesIBDesignable可以即時的顯示在StoryBoard上,我個人覺得會比較方便一點。

正所謂Learn In Do,我直接實作一個小小的範例,之後再講比較複雜點的應用。

直接開啟一個新專案,並且新增一個類別MyButton,並且在var之前加上@IBInspectable,讓這個屬性可以被StoryBoard編輯:

import UIKit
class MyButton: UIButton {
    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            //這個屬性在設定圓角的大小
            layer.cornerRadius = cornerRadius
            
            //這個屬性在決定是否要讓元件被裁切,如果這個屬性是false,則設置cornerRadius不會有效果
            layer.masksToBounds = (cornerRadius > 0)
        }
    }
}

現在切換到StoryBoard並且新增一個元件(UIButton),設置一下背景顏色,讓這個UIButton類別繼承MyButton
https://ithelp.ithome.com.tw/upload/images/20201010/20129144BzoF6e6xln.png


就可以發現多了一個可以設定的屬性,就是我們剛剛設定的圓角屬性,現在點擊它,會發現UIButton沒有反應,因為我們還沒有設定IBDesignable,這個屬性讓我們可以即時檢閱。


@IBDesignable加在class MyButton前:
https://ithelp.ithome.com.tw/upload/images/20201010/20129144zduKA73aME.png


現在完整的程式碼應該長得像這樣子:

import UIKit
@IBDesignable class MyButton: UIButton {
    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            //這個屬性在設定圓角的大小
            layer.cornerRadius = cornerRadius
            
            //這個屬性在決定是否要讓元件被裁切,如果這個屬性是false,則設置cornerRadius不會有效果
            layer.masksToBounds = (cornerRadius > 0)
        }
    }
}

現在已經可以使用StoryBoard的屬性檢閱器更改圓角大小以及即時顯示了,具體效果如下:
即時更改並且顯示圓角值

更複雜的應用之後講...也有可能我明天想到其他有趣的東西,就講其他東西了...


上一篇
Day24-新增UICollectionView的Item時,直接顯示最新的Item
下一篇
Day26-玩弄一下IBDesignable與IBInspectable來方便設置漸層功能
系列文
想知道自己iOS具現化系能力有多強嗎?實作幾個App就知道了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言