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