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

时间:2017-04-28 05:53:39

标签: swift3

第一篇文章,老实说,我在编码时非常糟糕。我正在与Swift 3合作开展学校项目,我有一个问题。

我通过for循环通过数组创建多个子视图......

...每个创建的子视图都包含一个以编程方式创建的标签,每个标签都有不同的单词,以及一个以编程方式创建的UI Tap Gesture附加到每个视图...

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!)")
    }

}

...(我不包括将所有视图分开堆叠在彼此之上的代码,因此请假设这些视图是间隔开的,并且此视图列表位于滚动视图中我的实际代码,只是不在这里填写意大利面条代码)...

...代码的结果是一个子视图的布局,每个子视图都有自己的标签,这个标签是一个不同的单词,每个子视图都有一个触发功能的点击手势......

...我想要的是一种方法来点击每个子视图并找到标签中的文本。截至目前,当你点击一个视图时,你会得到最后一个View中label.text的内容,因此print的结果(" label.text!") - > '名称'这有点道理。

是否有任何可能的方法来查找特定标签文本,即使它们都被称为"标签"?

我不想做集合视图或任何类似的东西,我需要这种编码来获得我需要的东西。

感谢无论谁帮助这个愚蠢的快速学生,对不起,我的Swift语言就像我的代码一样是垃圾。

1 个答案:

答案 0 :(得分:0)

您的问题是您正在for循环中初始化相同的DynamicViewlabel,因此它将覆盖并且它将具有该数组的最后一个值。要解决这个问题,您需要在for循环中创建单独的UIView和单独的UILabel。您还需要将label的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)
}

现在,您的所有视图origin都是CGPoint.zero,因此只有最后一个视图标签可见,当您点按标签以获取其文字时,您就可以获得这种方式。

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