2015-03-18 55 views
1
func setNavigation(titleText: String, subtitleText: String) { 
    // Need to update two labels inside of subtitleView 

    self.navigationItem.titleView = self.subtitleView 
} 

subtitleView变量是UIView类型。该视图只包含两个标签,我需要将这两个标签设置为函数参数值。如何通过subtitleView循环找到这两个标签并更新它们的值?遍历的UIView和更新的UILabel值

此代码我试图找到标签,但未能更新文本值“A”:

func setNavigation(titleText: String, subtitleText: String) { 
    for (var i = 0; i < self.subtitleView.subviews.count; i++) { 
     if self.subtitleView.subviews[i].isKindOfClass(UILabel) { 
      var labelReference: UILabel = self.subtitleView.subviews[i] as UILabel 
      labelReference.text = "A" 
     } 
    } 

    self.navigationItem.titleView = self.subtitleView 
} 
+0

您需要做一些故障排除。尝试在你的for循环中记录self.subtitleView.subviews [i],看看它给了你什么。 – rdelmar 2015-03-19 00:43:11

回答

0

您可以创建子类的UIView,并先后为2个UILabels变量的自定义类。

或者您也可以通过所有的子视图的UIView的环路,并设置标签:

for view in self.subtitleView.subviews as [UIView] { 
    if let labelReference = view as? UILabel{ 
     labelReference.text = "A" 
     NSLog("Updating Label") 
    } 
} 

如果文本没有更新,请检查您是否看到的NSLog上面打印任何东西输出。如果不是,我相信你的UILabels可能是零。

+0

理想情况下,我希望能够在没有子类化的情况下做到这一点(仅仅因为它非常简单,而且我知道有一个固定数量的标签)。我已经尝试了你在答案中提供的代码,当调用这段代码时,标签值不会被设置为“A”,它们只是空白:-( – jskidd3 2015-03-18 22:55:41

+0

你能初始化你的UIlabel有一些文本然后尝试它呢?还有,这段代码是在一个正常的函数中还是在一个异步块中完成的? – chrissukhram 2015-03-18 22:57:57

+0

我试着用空字符串初始化标签,正如你所建议的那样,但是令人讨厌的是这没有什么区别,代码在一个正常的函数中执行 – jskidd3 2015-03-18 23:01:09