Swift3 如何在不同的子视图中识别具有相同标识符的变量

Swift3 如何在不同的子视图中识别具有相同标识符的变量,swift3,Swift3,第一篇文章,老实说,我很不擅长编码。我正在和Swift 3合作一个学校项目,我有一个问题 我正在通过数组中的for-in循环创建多个子视图 …并且每个创建的子视图都包含一个以编程方式创建的标签,每个标签上都有一个不同的单词,每个视图上都有一个以编程方式创建的UI点击手势 Import UIKit class ViewController: UIViewController, UIGestureRecongizerDelegate { var array = ["Each","One","Has

第一篇文章,老实说,我很不擅长编码。我正在和Swift 3合作一个学校项目,我有一个问题

我正在通过数组中的for-in循环创建多个子视图

…并且每个创建的子视图都包含一个以编程方式创建的标签,每个标签上都有一个不同的单词,每个视图上都有一个以编程方式创建的UI点击手势

Import UIKit
class ViewController: UIViewController, UIGestureRecongizerDelegate 
{
var array = ["Each","One","Has","Its","Own","Name"]
var label = UILabel()
var DynamicView = UIView()
var count = 0


override func viewDidLoad() {

super.viewDidLoad()

createSubView()

//end SuperView
}

func createSubview()
 {
  for thing in array {
var string = array[count]
count = count + 1
DynamicView = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: 160))
            DynamicView.center = CGPoint(x: xV,y: yV)
            DynamicView.backgroundColor = UIColor.gray
            self.view.addSubview(DynamicView)

label = UILabel(frame: CGRect(x: 25, y: 25, width: 100, height: 21))
            label.center = CGPoint(x: 60, y: 13)
            label.textAlignment = .center
            label.font = UIFont(name: "Arial", size: 13)
            label.text = "\(string)"
            self.DynamicView.addSubview(label)

 let tapGesture = UITapGestureRecognizer(target: self, action: 
  #selector(ViewController.tapped(recignizer:)))

            DynamicView.isUserInteractionEnabled = true

            DynamicView.addGestureRecognizer(tapGesture)



}
 }
func tapped (recignizer:UITapGestureRecognizer){
        print("\(label.text!)")
    }

}
。。。(我排除了将所有视图相互堆叠的代码,因此请假设这些视图是隔开的,并且在我的实际代码中,此视图列表位于滚动视图中,只是不要在此处填充意大利面代码)

…代码的结果是子视图的布局,每个子视图都有自己的标签,即不同的单词,每个子视图都有一个触发函数的点击手势

…我想要的是点击每个子视图并找到标签中的文本的方法。现在,当你点击一个视图时,你会得到上一个视图中的label.text,所以打印结果(“label.text!”)-->“Name”,这是有意义的

是否有任何可能的方法可以找到特定的标签文本,即使它们都被称为“标签”

我不想做一个集合视图或任何类似的东西,我需要这种编码来完成我需要的工作


感谢帮助这个愚蠢的swift学生的人,很抱歉我的swift行话和我的代码一样是热垃圾。

你的问题是你在for循环中初始化相同的
DynamicView
label
,因此它将覆盖,并且将具有数组中的最后一个值。要解决此问题,您需要在for循环中创建单独的UIView和单独的UILabel。您还需要将标签的userInteraction设置为true,因为默认情况下它为false

for thing in array {
   let dynamicView = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: 160))
        dynamicView.center = CGPoint(x: xV,y: yV)
        dynamicView.backgroundColor = UIColor.gray
        self.view.addSubview(dynamicView)

    let label = UILabel(frame: CGRect(x: 25, y: 25, width: 100, height: 21))
        label.center = CGPoint(x: 60, y: 13)
        label.textAlignment = .center
        label.font = UIFont(name: "Arial", size: 13)
        label.text = thing
        self.dynamicView.addSubview(label)
        let tapGesture = UITapGestureRecognizer(target: self, action:  #selector(ViewController.tapped(recignizer:)))
        label.isUserInteractionEnabled = true
        label.addGestureRecognizer(tapGesture)
}
现在,您的所有视图的
原点
CGPoint.zero
,因此只有最后一个视图标签可见,当您点击标签获取其文本时,您可以通过这种方式获取

func tapped(recignizer:UITapGestureRecognizer){
    if let tappedLabel = recignizer.view as? UILabel {
         print("\(tappedLabel.text)”)
    }
}

您的问题是在for循环中初始化相同的
DynamicView
标签
,因此它将覆盖,并具有数组中的最后一个值。要解决此问题,您需要在for循环中创建单独的UIView和单独的UILabel。您还需要将标签的userInteraction设置为true,因为默认情况下它为false

for thing in array {
   let dynamicView = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: 160))
        dynamicView.center = CGPoint(x: xV,y: yV)
        dynamicView.backgroundColor = UIColor.gray
        self.view.addSubview(dynamicView)

    let label = UILabel(frame: CGRect(x: 25, y: 25, width: 100, height: 21))
        label.center = CGPoint(x: 60, y: 13)
        label.textAlignment = .center
        label.font = UIFont(name: "Arial", size: 13)
        label.text = thing
        self.dynamicView.addSubview(label)
        let tapGesture = UITapGestureRecognizer(target: self, action:  #selector(ViewController.tapped(recignizer:)))
        label.isUserInteractionEnabled = true
        label.addGestureRecognizer(tapGesture)
}
现在,您的所有视图的
原点
CGPoint.zero
,因此只有最后一个视图标签可见,当您点击标签获取其文本时,您可以通过这种方式获取

func tapped(recignizer:UITapGestureRecognizer){
    if let tappedLabel = recignizer.view as? UILabel {
         print("\(tappedLabel.text)”)
    }
}

我现在就做了,但是“if let tappedLabel=recignizer.view as?UILabel”最后是一个零值。@我将手势添加到
UILabel
而不是
uiview
,然后你们都准备好了。我现在就做了,但是“if let tappedLabel=recignizer.view as?UILabel”结果是一个零值。@如果我将手势添加到
UILabel
而不是
uiview
,您就可以开始了。