First strategy: accessibility to the rescue!
Lengthy story brief, I used to be fairly uninterested in tagging views with silly quantity values, so I seemed for a greater various resolution to repair my drawback. Because it turned out, there’s a property known 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 title my views in a very nice method. As a free of charge storing the title below the accessibilityIdentifier
will profit your UI exams. 😉
Second strategy: utilizing enums
The primary concept is to have an Int
primarily based 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, but it surely’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. 😂
When you have a greater resolution for this drawback, be happy to share it by means of twitter. Oh, by the way in which, remember to subscribe to my month-to-month e-newsletter beneath.