2014-11-10 3 views
0

У меня есть 6 UILabels как IBOutlets с именем tutorialLabel1, tutorialLabel2 и т. Д. Я хочу привести их всех к фронту, используя цикл. Вот мой код:Как использовать значение переменной как UILabel?

var tempLabel = "tutorialLabel" 
for var i=1; i<=6; i++ { 
    tempLabel = "tutorialLabel" + String(i) 
    self.tempLabel.bringSubviewToFront(self.tempLabel) 
} 

Но он возвращает ошибку

tempLabel не состоит зрения.

Я думаю, мне нужно использовать функцию valueForKey здесь, но не уверен, как реализовать ее в Swift. Можете ли вы помочь мне написать эту строку кода?

+1

Вам нужно будет объяснить здесь больше. Что такое 'String (i)'? Почему у вас есть что-то под названием 'tempLabel', которое является строкой, а затем что-то называемое' tempLabel', которое пытается быть 'UIView'? Кроме того, что вы пытаетесь «вывести на передний план». Я сомневаюсь, что 'self.tempLabel' является' subview' 'self.tempLabel', потому что это одно и то же. ** Забудьте о коде. Что вы пытаетесь сделать? Просто объясните, что вы делаете, вместо того, чтобы спрашивать, как исправить этот код. ** – Fogmeister

ответ

2

Вместо того, чтобы пытаться динамически создать имя, которое ссылается на ваши ярлыки, вы можете использовать IBOutletCollection:

@IBOutlet var viewsToBringToFront: [UIView]! 

Вы можете подключить все виды, которые вы хотите, чтобы принести на фронт к этой коллекции и просто проведите через него, чтобы вывести их спереди:

for view in viewsToBringToFront { 
    view.superview?.bringSubviewToFront(view) 
} 
+0

, но как я могу индивидуально отображать/скрывать эти метки при необходимости? – TPCO

+0

@KiZ вы можете либо поддерживать отдельные выходы, либо добавить «тег» в построитель интерфейсов, чтобы вы могли прокручивать IBOutletCollection, чтобы найти конкретное представление. – drewag

Смежные вопросы