Swift: 通过 ID 获取 UI 个对象?
Swift: get UI objects by ID?
在iOS中,是否可以为UI对象分配一个字符串ID,然后通过该ID在代码中检索它们?
我正在寻找类似于 Android 的 findViewById(id)
的东西
您可以使用 viewWithTag
但标签类型为 Int
:
let superView = UIView()
let subView = UIView()
subView.tag = 100
superView.addSubview(subView)
let v = superView.viewWithTag(100)
如果使用 xib
或 storyboard
你可以像这样绑定 id:
使用运行时,您可以将 obj 绑定到 obj,但似乎不是您想要的:
objc_setAssociatedObject(superView, "key", subView, .OBJC_ASSOCIATION_RETAIN)
let v = objc_getAssociatedObject(superView, "key")
更新:
您可以使用枚举来获取视图:
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
}
}
然后使用:
let dict = ["aa":123]
dict.forEach { (key,value) in
let v = UIKey(rawValue: key)?.findView(key, fromView: self.view)
//set v with your value
}
由于故事板中有多个 viewController,因此您可能正在寻找 UIStoryboard
s storyboard.instantiateViewControllerWithIdentifier(identifier: String)
// Basic example
let viewController = yourStoryboard.instantiateViewControllerWithIdentifier("id") as! UIViewController
我需要在多个 UITableViewController 之间共享一个 UITableViewCell 后代与 UIButton。所以 IBOutlet 不是我的选择,我需要类似于 Android findByViewId
的东西
所以我在配置它时在 UITableViewCell 后代中做到了:
for view in self.contentView.subviews {
if let button = view as? UIButton {
button.setTitle(item.label, for: .normal)
}
}
如果您有更复杂的单元格布局,我想您可以使用一些特定的视图属性来识别所需的子视图。
P.S。根据我的经验,将标签 属性 用于此类目的通常不是一个好主意。
在iOS中,是否可以为UI对象分配一个字符串ID,然后通过该ID在代码中检索它们?
我正在寻找类似于 Android 的 findViewById(id)
您可以使用 viewWithTag
但标签类型为 Int
:
let superView = UIView()
let subView = UIView()
subView.tag = 100
superView.addSubview(subView)
let v = superView.viewWithTag(100)
如果使用 xib
或 storyboard
你可以像这样绑定 id:
使用运行时,您可以将 obj 绑定到 obj,但似乎不是您想要的:
objc_setAssociatedObject(superView, "key", subView, .OBJC_ASSOCIATION_RETAIN)
let v = objc_getAssociatedObject(superView, "key")
更新:
您可以使用枚举来获取视图:
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
}
}
然后使用:
let dict = ["aa":123]
dict.forEach { (key,value) in
let v = UIKey(rawValue: key)?.findView(key, fromView: self.view)
//set v with your value
}
由于故事板中有多个 viewController,因此您可能正在寻找 UIStoryboard
s storyboard.instantiateViewControllerWithIdentifier(identifier: String)
// Basic example
let viewController = yourStoryboard.instantiateViewControllerWithIdentifier("id") as! UIViewController
我需要在多个 UITableViewController 之间共享一个 UITableViewCell 后代与 UIButton。所以 IBOutlet 不是我的选择,我需要类似于 Android findByViewId
的东西所以我在配置它时在 UITableViewCell 后代中做到了:
for view in self.contentView.subviews {
if let button = view as? UIButton {
button.setTitle(item.label, for: .normal)
}
}
如果您有更复杂的单元格布局,我想您可以使用一些特定的视图属性来识别所需的子视图。
P.S。根据我的经验,将标签 属性 用于此类目的通常不是一个好主意。