如何从变量生成Labelname? (如何将字符串转换为UILabel)

时间:2019-05-08 21:38:08

标签: swift uilabel

我想根据所按下按钮的标题来引用标签。

我有很多按钮,可以通过一个动作将它们连接在一起。我希望只能引用一个标签,该标签与按下的按钮的名称相对应。

标签名称为: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

3 个答案:

答案 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