First strategy: accessibility to the rescue!
Lengthy story quick, I used to be fairly bored with tagging views with silly quantity values, so I seemed for a greater various resolution to repair my downside. Because it turned out, there’s a property referred to as accessibilityIdentifier
that may do the job.
extension UIView {
var id: String? {
get {
return self.accessibilityIdentifier
}
set {
self.accessibilityIdentifier = newValue
}
}
func view(withId id: String) -> UIView? {
if self.id == id {
return self
}
for view in self.subviews {
if let view = view.view(withId: id) {
return view
}
}
return nil
}
}
I made a easy extension across the UIView class, so now I can use a correct string worth to uniquely establish any view object within the view hierarchy. It is fairly a pleasant resolution, now I can identify my views in a very nice approach. As a free of charge storing the identify below the accessibilityIdentifier
will profit your UI exams. 😉
Second strategy: utilizing enums
The primary concept is to have an Int
based mostly enum for each view identifier, so principally you should use the tag
property to retailer the enum’s rawValue
. It is nonetheless not so good because the one above, however it’s far more protected than counting on pure integers. 😬
enum ViewIdentifier: Int {
case submitButton
}
extension UIView {
var identifier: ViewIdentifier? {
set {
if let worth = newValue {
self.tag = worth.rawValue
}
}
get {
return ViewIdentifier(rawValue: self.tag)
}
}
func view(withId id: ViewIdentifier) -> UIView? {
return self.viewWithTag(id.rawValue)
}
}
Truthfully I simply got here up with the second strategy proper after I copy & pasted the primary snippet to this text, however what the heck, perhaps another person will prefer it. 😂
In case you have a greater resolution for this downside, be happy to share it via twitter. Oh, by the best way, do not forget to subscribe to my month-to-month publication beneath.