使用 IBInspectable 和 IBDesignable

最近 Xcode 版本中最酷的新功能中的一個(或兩個)是 IBInspectable 屬性和 IBDesignable UIViews。這些與你的應用程式的功能無關,而是影響 Xcode 中的開發人員體驗。目標是能夠在不執行 iOS 應用程式的情況下直觀地檢查自定義檢視。因此,假設你有一個創造性地命名為 CustomView 的自定義檢視,該檢視繼承自 UIView。在此自定義檢視中,它將顯示具有指定顏色的文字字串。你也可以選擇不顯示任何文字。我們需要三個屬性:

var textColor: UIColor = UIColor.blackColor()
var text: String?
var showText: Bool = true

然後我們可以覆蓋類中的 drawRect 函式:

if showText {
    if let text = text {
        let s = NSString(string: text)
        s.drawInRect(rect,
            withAttributes: [
                NSForegroundColorAttributeName: textColor,
                NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 18)!
            ])
    }
}

假設設定了 text 屬性,這將在執行應用程式時在檢視的左上角繪製一個字串。問題是如果不執行應用程式,我們將不知道它是什麼樣的。這就是 IBInspectableIBDesignable 的用武之地 .IBInspectable 允許我們在 Xcode 中直觀地設定檢視的屬性值,就像內建控制元件一樣。IBDesignable 將向我們展示故事板中的視覺預覽。以下是該類的外觀:

@IBDesignable
class CustomView: UIView {
    @IBInspectable var textColor: UIColor = UIColor.blackColor()
    @IBInspectable var text: String?
    @IBInspectable var showText: Bool = true

    override func drawRect(rect: CGRect) {
        // ...
    }
}

或者在目標 C 中:

IB_DESIGNABLE
@interface CustomView: UIView

@property (nonatomic, strong) IBInspectable UIColor* textColor;
@property (nonatomic, strong) IBInspectable NSString* text;
@property (nonatomic, assign) IBInspectable BOOL showText;

@end

@implementation CustomView

- (instancetype)init {
    if(self = [super init]) {
        self.textColor = [UIColor blackColor];
        self.showText = YES;
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    //...
}

@end

下一個螢幕截圖顯示了 Xcode 中發生的事情。第一個是新增修訂後的類後發生的事情。請注意,這三個屬性有三個新的 UI 元素。該文字顏色會顯示顏色選擇器,文字只是一個輸入框和顯示文字會給我們它們分別是 falsetrueOffOn 的選項。

StackOverflow 文件

接下來是使用顏色選擇器將文字顏色更改為紅色。此外,還提供了一些文字以使 drawRect 功能顯示它。請注意,Interface Builder 中的檢視也已更新。

StackOverflow 文件

最後,在屬性檢查器中將“ 顯示文字” 設定為 Off 使得 Interface Builder 中的文字顯示消失。

StackOverflow 文件

然而,當我們需要在你的 Storyboard 中的多個檢視建立圓形 UIView 時,我們都會出現這種情況。而不是向 Storyboard 的每個檢視宣告 IBDesignable,更好的是建立 UIViewUIView 並獲得專為你的每個 tihuan 建立的使用者介面 24 整個專案通過設定角半徑來建立圓角檢視。在故事板中建立的任何 UIView 上的可配置邊框半徑。

extension UIView {
    
    @IBInspectable var cornerRadius:CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
    
}

StackOverflow 文件