簡體   English   中英

用新屬性擴展UIView

[英]Extend UIView with new properties

在我的應用程序中,我需要向一堆UIKit對象添加一些屬性。 我最初的想法是為我需要的每個元素創建一個子類,並在新類中創建屬性,但是我意識到這意味着為我正在使用的每種UI元素類型編寫一個新類。

在我的特定情況下,我想添加一些不同的視圖,例如UIImageViewUILabel 兩個屬性,稱為CGRect類型的initial positionfinal position ,用於存儲初始和最終位置,以便在翻譯此視圖的方法中使用它

有什么方法可以在不創建很多類的情況下完成此任務?

您可以執行以下操作:

protocol Position {
    var initialPosition: Int { get set }
}

不能僅在擴展中聲明屬性,因此您需要設置getset 您可以只關聯一個值:

private var initialPositionKey: UInt = 0
extension Position {
    var initialPosition: Int {
        get {
            return objc_getAssociatedObject(self, &initialPositionKey) as! Int
        }
        set {
            objc_setAssociatedObject(self, &initialPositionKey, newValue, .OBJC_ASSOCIATION_RETAIN)
        }
    }
}

然后,您可以像這樣擴展UIView

extension UIView: Position {}

和以下作品:

var view = UIView()
view.initialPosition = 5
print (view.initialPosition) // 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM