如果我在UILabel
上有一个viewcontroller
,并已从vc将其连接到我的swift班级:
class RoomScheduleViewController: UIViewController {
@IBOutlet weak var bookingLabel8: UILabel!
如何通过一种方法访问它?像这样:
let hour = 8
let labelToChange = "bookingLabel" + String(hour)
//Manipulate label e.g. labeltoChange.text = ".."
还有一个像这样的数组:让
bookingLabelArray : [UILabel] = [bookingLabel8, bookingLabel9, bookingLabel10, bookingLabel11,bookingLabel12]
,打算尝试遍历并检查字符串是否等于标识符,但不确定如何执行此操作?
答案 0 :(得分:1)
您可以使用字典将“小时”映射到标签,例如
let labels = [8: bookingLabel8, 9: bookingLabel9 /* and so on */]
let hour = 8
if let labelToChange = labels[hour] {
// do something
}
答案 1 :(得分:1)
无法发表评论,所以我会在尝试回答时提出问题。
要通过一种方法访问标签,您可以像这样使用标签:
bookingLabel8.text = "..."
但是看到拥有这些标签的数组时,我认为您的意思是一种动态更新给定标签文本的方法。
为此,您可以将标签作为参数传递给方法,就像这样:
func change(label: UILabel, to text: String) {
label.text = text
}
这样,您可以为所需的任何标签调用此函数,并使用循环遍历标签并检查要更改的标识符:
change(label: bookingLabelArray[0], to: "new text")
但是这似乎是一种奇怪的方法,您确定需要将这些标签用作静态UI组件吗?这似乎更像是列表/集合视图中动态原型的用例。那里有很多教程,这似乎是不错的Prototype Cells
答案 2 :(得分:1)
您不能在运行时编写变量名称。
可能的解决方案是将标签声明为IBOutletCollection
@IBOutlet weak var bookingLabels: [UILabel]!
以正确的顺序将Interface Builder中的所有标签连接到此插座
然后添加一种方法来获取索引标签(假设标签8是集合中的第一个标签)
func label(for hour: Int) -> UILabel? {
let index = hour - 8
guard 0..<bookingLabels.count ~= index else { return nil }
return bookingLabels[index]
}
答案 3 :(得分:0)
您可以为每个循环使用a:
如果我理解正确,那么您想用特定的文本来捕捉标签,那么就可以将该特定的文本称为“您的标识符”:
bookingLabelArray.forEach { (label) in
if label.text == "your identifier" {
// do something with that label.
}
}
答案 4 :(得分:0)
let hour = int ()
hour = 8
let bookingLabelArray = NSMutableArray()
let labelToChange = UILabel()
for i in 0..<4 // count till you want.. here take 4
{
labelToChange = "bookingLabel" + String(hour + i)
bookingLabelArray .add(labelToChange)
//You can directly check label text
if labelToChange.text == "yourIdentifier" {
// do whatever you want.
}
// You can check from array
if((bookingLabelArray.object(at: i) as! String) == "yourIdentifier" {
// do whatever you want.
}
}
答案 5 :(得分:0)
您可以使用IBOutlet集合进行此操作。为此,您需要制作“ 插座集合”而不是 IBOutlet ,例如:
@IBOutlet weak var bookingLabel: [UILabel]!
,随后您可以使用索引(如数组)访问它们。例如:
bookingLabel[8].text = "some text"
要建立插座连接,请从界面构建器中为第一个标签选择插座集合,然后将每个标签连接到该插座。
有关IBOutlet集合的更多详细信息,请访问以下链接: Outlet Collections
答案 6 :(得分:0)
如果为标签设置标签,则无需IBOutlet即可访问标签。 然后您可以执行以下操作:
func label(for hour: Int) -> UILabel? {
return view.viewWithTag(hour) as? UILabel
}
let hour = 8 // bookingLabel8 needs tag 8
let labelToChange = label(for: hour)
labelToChange?.text = ".."
注意:这很简单,但是很危险,因为您可以为多个子视图设置相同的标签