在Swift的UIView中找到UILabel

时间:2014-08-20 19:08:44

标签: ios swift uiview uilabel

我试图在我的UIViewControllers的超级视图中找到我的UILabels。 这是我的代码:

func watch(startTime:String, endTime:String) {
    if superview == nil {println("NightWatcher: No viewcontroller specified");return}

    listSubviewsOfView(self.superview!)

}

func listSubviewsOfView(view: UIView) {
    var subviews = view.subviews

    if (subviews.count == 0) { return }

    view.backgroundColor = UIColor.blackColor()

    for subview in subviews {
        if subview.isKindOfClass(UILabel) {
            // do something with label..
        }
        self.listSubviewsOfView(subview as UIView)
    }
}

这是在Objective-C中推荐的方式,但在Swift中我除了UIViews和CALayer之外什么也得不到。我肯定在提供给这个方法的视图中有UILabel。我错过了什么?

我的UIViewController中的调用:

  NightWatcher(view: self.view).watch("21:00", endTime: "08:30") // still working on

4 个答案:

答案 0 :(得分:11)

这是一个版本,它会在您传入的任何视图中返回ArrayUILabel个视图:

func getLabelsInView(view: UIView) -> [UILabel] {
    var results = [UILabel]()
    for subview in view.subviews as [UIView] {
        if let labelView = subview as? UILabel {
            results += [labelView]
        } else {
            results += getLabelsInView(view: subview)
        }
    }
    return results
}

然后你可以迭代它们做你想做的事情:

override func viewDidLoad() {
    super.viewDidLoad()

    let labels = getLabelsInView(self.view)
    for label in labels {
        println(label.text)
    }
}

答案 1 :(得分:6)

使用函数式编程概念可以更轻松地实现这一目标。

let labels = self.view.subviews.flatMap { $0 as? UILabel }

for label in labels {
//Do something with label
}

答案 2 :(得分:1)

快捷键4

熟练使用mKane的答案,您可以使用以下代码:

let labels = self.view.subviews.compactMap { $0 as? UILabel }

for label in labels {
   // do whatever
}

答案 3 :(得分:0)

您可以在情节提要中为tag设置UILabel或使用以下程序以编程方式设置:

myLabel.tag = 1234 

然后,要找到它,请使用:

let myLabel = view.viewWithTag(1234)