【问题标题】:how to access UIView without using tag method如何在不使用标签方法的情况下访问 UIView
【发布时间】:2017-03-07 23:48:44
【问题描述】:

我有自己的自定义视图并将它们动态添加到 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

我有一些事件会触发我的视图在屏幕上移动。我调用一个数据库来获取他们的新位置,然后我需要更新它们。如何使用自定义视图上的用户 ID 访问视图?我会使用标签,但它们只是 INT,我需要比这更大的东西。否则我需要将标签映射到我真正想要避免的用户 ID。

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

我希望您知道如何解决这个问题。非常感谢您的帮助。 谢谢!

【问题讨论】:

    标签: ios swift uiview uiviewcontroller


    【解决方案1】:

    两种选择:

    一: 使用 for 循环遍历那些自定义视图已添加到的 UIImageView.subviews。将每个视图设置为 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
    }
    

    两个:当您添加 pinView 时,将它们添加到以 userId 作为键的字典中。当您需要 pinView 时。用钥匙得到它:

    // init
    var pinViews: [String: pinView] = [:]
    
    // after adding subview
    pinViews[pinViewInstance.userID] = pinViewInstance
    
    // get pinView
    let pin: pinView = pinViews[userID] as! pinView
    

    【讨论】:

    • 这就像一个魅力。非常好的解决方案,优雅且绝对胜过使用标签。正是我需要的。
    【解决方案2】:

    您可以通过使用此类类型检查来遍历imageView.subviews 并找到pinView

    if type(of: aSubview) == pinView.self
    

    然后您可以访问userID并检查正确的userID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多