Ios 如何在不使用标记方法的情况下访问UIView
我有自己的自定义视图,并将它们动态添加到UIViewController 这些观点类似于:Ios 如何在不使用标记方法的情况下访问UIView,ios,swift,uiview,uiviewcontroller,Ios,Swift,Uiview,Uiviewcontroller,我有自己的自定义视图,并将它们动态添加到UIViewController 这些观点类似于: class pinView: UIView { var userID : String? var lastTimeConnected : Date? init(userID: String, lastTimeConnected : Date) { self.userID = userID self.lastTimeConnected = lastTi
class pinView: UIView {
var userID : String?
var lastTimeConnected : Date?
init(userID: String, lastTimeConnected : Date)
{
self.userID = userID
self.lastTimeConnected = lastTimeConnected
}
然后,通过调用
imageView.addSubview(pinViewInstance) in a loop
我有一些事件会触发我的视图在屏幕上移动。我打电话给数据库获取他们的新职位,然后我需要更新他们。如何在自定义视图中使用userID访问视图?我会使用标签,但他们只是INT,我需要比这更大的东西。否则,我需要将标记映射到我真正想要避免的userid
说清楚。。。我知道我能做到:
让pinViewInstance=self.view.viewWithTag(numberher)为?品维尤
但我想要的是通过ID访问它,这是我首先扩展UIView类的第一个原因
我希望你知道如何解决这一问题,但这一问题已经困扰了一段时间,无法找到解决办法。非常感谢你的帮助。
谢谢 您可以通过使用此类类型检查来迭代
imageView.subview
并查找pinView
:
if type(of: aSubview) == pinView.self
然后,您可以访问userID
,并检查是否有正确的userID
两个选项:
One:使用for循环迭代那些自定义视图添加到的UIImageView.subview。将每个视图设置为pinView引用,并比较其中的用户ID
func getPinView(userId: String) -> (pinView?) {
for view in self.imageView.subviews as [UIView] {
if let pin = view as? pinView {
if pin.userID == userId {
return pin
}
}
}
return nil
}
Two:添加pinView时,将它们添加到以用户ID为键的字典中。当你需要pinView的时候。使用键获取它:
// init
var pinViews: [String: pinView] = [:]
// after adding subview
pinViews[pinViewInstance.userID] = pinViewInstance
// get pinView
let pin: pinView = pinViews[userID] as! pinView
这很有魅力。非常好的解决方案,优雅,绝对胜过使用标签。正是我需要的。