第一篇文章,老实说,我在编码时非常糟糕。我正在与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语言就像我的代码一样是垃圾。
答案 0 :(得分:0)
您的问题是您正在for循环中初始化相同的DynamicView
和label
,因此它将覆盖并且它将具有该数组的最后一个值。要解决这个问题,您需要在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)”)
}
}