Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在不使用标记方法的情况下访问UIView_Ios_Swift_Uiview_Uiviewcontroller - Fatal编程技术网

Ios 如何在不使用标记方法的情况下访问UIView

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

我有自己的自定义视图,并将它们动态添加到UIViewController

这些观点类似于:

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

这很有魅力。非常好的解决方案,优雅,绝对胜过使用标签。正是我需要的。