gpt4 book ai didi

ios - 识别 UIViewController 上的 View

转载 作者:行者123 更新时间:2023-11-28 06:23:35 26 4
gpt4 key购买 nike

我正在构建一个具有带图像的 ScrollView 的应用程序。最重要的是,我正在根据我的自定义类添加 View 。想象一下上面有针脚的滚动 UI View 图片。背景图片然后每个图钉都是一个新层。

像这样的东西(不是完整的代码,但相当全面会让你对我正在尝试做的事情有一个很好的了解。)

class MapViewController: UIViewController, UIScrollViewDelegate, UITextFieldDelegate, CLLocationManagerDelegate {

var scrollView : UIScrollView!
var imageView : UIImageView!



override func viewDidLoad() {

create()
super.viewDidLoad()

}

func create() {
let dynamicUserPin = UserPin(userID: "UX2318afjk2-fa8hasd-hasdf-jada-fjasd", name: "Ric", posX: Int(1500), posY: Int(1800), pictureURL: "11056102_10100155919186355_3729750518855248330_n.jpg", direction: 1, colour: "Red", currentTrack: 33, lastTimeConnected: Date())
dynamicUserPin.tag = 1000

containerView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.viewTapped(_:))))


imageView.addSubview(dynamicUserPin)

containerView.addSubview(imageView)


scrollView.addSubview(containerView)

view.addSubview(scrollView)
}
}

我的问题是,我将不得不找到非常动态且会随时间变化的 View (UserPins)。我显然可以通过遍历 View 来找到用户图钉。那没问题。问题是我如何在没有标签的情况下做到这一点,因为这意味着在我的用户 ID 和我试图避免的标签之间保持映射。如何获取 subview 的详细信息?我创建了一个扩展来获取 subview :

extension UIView {
func subviewsList() -> [UIView] {
var subviews = self.subviews
if subviews.count == 0 {
return subviews + []
}
for v in subviews {
subviews += v.subviewsList()

}
return subviews
}
}

我的 View 类如下所示:

导入 UIKit

class UserPin: UIView {


var userID : String?
var name : String?
var posX : Int?
var posY : Int?
var pictureURL : String?
var direction : Int?
var colour : String?
var currentTrack : Int?
var lastTimeConnected : Date?


init(userID: String, name: String, posX: Int, posY: Int, pictureURL: String, direction: Int, colour: String, currentTrack : Int, lastTimeConnected : Date)
{
self.userID = userID
self.name = name
self.posX = posX
self.posY = posY
self.pictureURL = pictureURL
self.direction = direction
self.colour = colour
self.currentTrack = currentTrack
self.lastTimeConnected = lastTimeConnected

super.init(frame: CGRect(x: posX, y: posY, width: 100, height: 100))
print("finished init")
self.addControls(userID, name: name, posX: posX, posY: posY, pictureURL: pictureURL, direction: direction, colour: colour, currentTrack: currentTrack, lastTimeConnected: lastTimeConnected)
}

那么如何获取我添加的 View 的用户 ID?

最佳答案

您的 UIViewController 子类应包含一个可变集,称为 mapPins,声明如下:

var mapPins: Set

每当您创建一个新的 pin 时,将其插入到该可变集合中并将其添加为 subView

然后,如果您需要访问所有引脚,只需遍历 mapPins 集的内容即可。

I guess the question is how do I get to the view object again to get the user ID?

How do I get to the pin by tapping on it?

有几种方法可以做到这一点。我建议为每个图钉 View 制作一个 UITapGestureRecognizer。 (在创建图钉的同时制作手势识别器。)

为点击识别器创建一个方法来调用您的 UIViewController 子类:

func handleTapOnPin(_ recogniser: UITapGestureRecognizer?) {
// a pin has been tapped on
}

将手势识别器的目标设置为子类,将 Action 设置为该方法的选择器,如下所示:#selector(self.handleTapOnPin(_:))

在该方法中,要访问您的 pin,您可以执行 recognizer.view()

关于ios - 识别 UIViewController 上的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42630272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com