【发布时间】:2017-03-06 16:08:02
【问题描述】:
我正在构建一个具有带有图像的滚动视图的应用程序。最重要的是,我正在添加基于我的自定义类的视图。想象一个带有大头针的滚动 UI 视图图片。背景图片,然后每个图钉都是一个新图层。
类似这样的东西(不是完整的代码,但非常全面,可以让您很好地了解我正在尝试做的事情。)
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)
}
}
我的问题是我必须找到非常动态且会随着时间而变化的视图(UserPins)。我显然可以通过遍历视图找到用户引脚。那没问题。问题是我如何在没有标签的情况下做到这一点,因为这意味着在我的用户 ID 和我试图避免的标签之间保持映射。如何获取子视图的详细信息?我创建了一个扩展来获取子视图:
extension UIView {
func subviewsList() -> [UIView] {
var subviews = self.subviews
if subviews.count == 0 {
return subviews + []
}
for v in subviews {
subviews += v.subviewsList()
}
return subviews
}
}
我的视图类看起来像这样:
导入 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)
}
那么如何获取我添加的视图的用户 ID?
【问题讨论】:
-
为什么不创建一个“Pins”(一个数组)的集合?然后,您可以在任何时候添加或删除此集合中的添加或删除。然后,您不必通过“子视图”集合获取它们并确定它们是引脚还是其他操作系统给定的视图。
-
你是对的,这就是我要做的。该代码并没有真正表明我知道,但可以想象 dynamicUserPin 将被一组引脚替换并作为子视图添加到视图中。我想问题是如何再次访问视图对象以获取用户 ID?
-
如果你有一个数据数组可以变成这些“Pins”,那么为什么不也有一个“Pins”数组呢?然后,您可以遍历“Pins”并直接从它们获取 UserID。我想我还没有完全理解这个困境。
-
@Putz1103 为您提供解决方案,因为您在每个引脚上都有用户 ID 等,您只需对照数组检查 UIView 用户 ID 并从 superView 中删除 UIView 并从数组中删除等效数据。
-
不要使用“层”这个词。称它们为子视图。在 iOS 中,视图由核心动画层(
CALayer对象)支持,因此使用术语层会引起混淆。
标签: ios swift uiview uiviewcontroller