Swift:通过ID获取UI对象?

Dan*_*e B 7 tags findviewbyid state-restoration swift

在iOS中,是否可以为UI对象分配字符串ID,然后通过该ID在代码中检索它们?

我正在寻找类似Android的东西 findViewById(id)

Wil*_* XJ 9

你可以使用viewWithTag但标签的类型是Int:

let superView = UIView()
let subView = UIView()
subView.tag = 100
superView.addSubview(subView)
let v = superView.viewWithTag(100)
Run Code Online (Sandbox Code Playgroud)

如果使用xibstoryboard你可以像这样绑定id: 在此输入图像描述

使用运行时你可以将obj绑定到obj,但似乎不是你想要的:

objc_setAssociatedObject(superView, "key", subView, .OBJC_ASSOCIATION_RETAIN)
let v = objc_getAssociatedObject(superView, "key")
Run Code Online (Sandbox Code Playgroud)

更新:

您可以使用枚举来获取视图:

enum UIKey:String {
    case AA = "aa"


    func findView(byKey:String ,fromView:UIView) -> UIView {
        let v :UIView!

        switch self {
            // get view from real tag value
            case .AA: v = fromView.viewWithTag(1)
        }

        return v
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

let dict = ["aa":123]

dict.forEach { (key,value) in
    let v = UIKey(rawValue: key)?.findView(key, fromView: self.view)
    //set v with your value

}
Run Code Online (Sandbox Code Playgroud)