我想根据所按下按钮的标题来引用标签。
我有很多按钮,可以通过一个动作将它们连接在一起。我希望只能引用一个标签,该标签与按下的按钮的名称相对应。
标签名称为:aLabel,bLabel,cLabel ... 按下的按钮标题为“ a”,“ b”,“ c” ...
我用我要引用的标签名称创建字符串,但是我不能将其用作标签名称来更改此特定标签值。
我想使用此字符串来引用相应的标签,以更改其标题,颜色等。
我尝试了转换,寻找了一个将字符串更改为UILabels的函数。我也在考虑使用带有指向Labels的指针的数组,但是即使建立指向单个Label的指针也没有成功...
//My code
@IBOutlet weak var a: UIButton!
@IBOutlet weak var b: UIButton!
@IBOutlet weak var c: UIButton!
@IBOutlet weak var aLabel: UILabel!
@IBOutlet weak var bLabel: UILabel!
@IBOutlet weak var cLabel: UILabel!
var currentLabel : String
@IBAction func FieldDisplay(_ sender: UIButton) {
currentLabel = sender.currentTitle! + "Label"
currentLabel.text = "OK"
}
//what I tried
(UILabel)currentLabel.text = "OK"
currentLabel = currentLabel.to.UIlabel
答案 0 :(得分:1)
删除所有网点并创建2个收藏集
@IBOutlet var allBts: [UIButton]!
@IBOutlet var allLbls: [UILabel]!
然后将所有标签/ btns挂接到每个标签上,并为每个组设置一个标签(lbl1 && btn1标签= 0,lbl2 && btn2标签= 1,依此类推)
@IBAction func FieldDisplay(_ sender: UIButton) {
allLbls[sender.tag].text = sender.currentTitle! + "Label"
}
答案 1 :(得分:1)
当接口对象像这样多对关联时(如您所知,一系列按钮-标签对),通常使用两种方法。一种是为每对分配一个 tag 。例如,在情节提要中,第一个按钮将具有标签1,第一个标签将具有标签101。然后,第二个按钮将具有标签2,第二个标签将具有标签102。依此类推。
因此,现在在IBAction函数中,查看tag
的{{1}},向其添加100,然后在sender
上调用viewWithTag
以找到相应的标签
另一种可能性是使用插座集合。没有一个按钮插座,而是三个按钮插座;标签也是如此。现在,在IBAction函数中,您将在按钮数组中得到按钮的view
;如果设置正确,则为其数组中相应标签的索引。
答案 2 :(得分:0)
您可以使用 value(forKey:)方法
@IBAction func buttonTapped(_ sender: UIButton) {
if let currentLabel = value(forKey: sender.currentTitle! + "Label") as? UILabel {
currentLabel.text = "OK"
}
}
https://developer.apple.com/documentation/objectivec/nsobject/1412591-value