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

这些视图类似于:

class pinView: UIView {


    var userID : String?
    var lastTimeConnected : Date?


    init(userID: String, lastTimeConnected : Date)
    {
        self.userID = userID
self.lastTimeConnected = lastTimeConnected

    }

然后,我通过调用将视图添加到UIViewController
 imageView.addSubview(pinViewInstance) in a loop

我有一些事件会触发我的视图在屏幕上移动。我打电话给数据库以获取新职位,然后需要对其进行更新。如何在自定义视图上使用userID进入视图?我会使用标签,但它们只是INT,我需要比这大得多的东西。否则,我需要将标签映射到我真正要避免的用户ID。

要清楚...我知道我可以这样做:
让pinViewInstance = self.view.viewWithTag(numberHere)为? pinView
但是我想要通过ID访问它,这是我首先扩展UIView类的第一个原因。

我希望您知道解决该问题的方法已经停留了一段时间,并且看不到解决方法。非常感谢您的帮助。
谢谢!

最佳答案

两种选择:

一个:通过UIImageView.subviews的for循环进行迭代,这些自定义视图已添加到这些子视图中。将每个视图设置为pinView引用,并在其中比较userID。

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
}

二:,当您添加pinView时,将它们添加到以userId为键的字典中。并且当您需要pinView时。通过密钥获取:
// init
var pinViews: [String: pinView] = [:]

// after adding subview
pinViews[pinViewInstance.userID] = pinViewInstance

// get pinView
let pin: pinView = pinViews[userID] as! pinView

关于ios - 如何在不使用标签方法的情况下访问UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42660498/

10-13 06:34