我正在创建一个具有多个按钮和相应标签的应用程序。布局位于一个nib (.xib)文件中,该文件连接到下面代码所在的类。我试图避免对每个标签使用IBOutlet,因为这样会产生大量额外的代码。
我知道有一种使用标签引用标签的方法:
UILabel *countLabel = (UILabel *)[self.view viewWithTag:numOfTag];我在我的buttonPressed方法中调用了它。但是,当我试图更改文本时
[countLabel setText:@"newLabel"];应用程序崩溃了。我访问错了吗?我是XCode..Help的新手!
谢谢:)
发布于 2013-11-11 04:12:38
这不是正确的做法。首先,当您在XIB文件中创建UILabel时,您只能在那里命名它们--在技术上,您不需要在连接的视图控制器中设置标签值。其次,即使您想在后期重置标签,使用IBOutlets连接它们也是最好的选择。扫描所有子视图,然后找到带有其标记的特定子视图更繁琐,在这种情况下应该避免。
编辑:
对于您需要创建50多个按钮和标签的情况,我建议您创建一个包含UIButton和UILabel的自定义UILabel。然后在要显示它们的视图中,在for循环中创建对象并显示它们。当UIButton被点击时,您将很容易通过自定义UIView对象获取相关的UIView。
发布于 2013-11-11 04:06:23
您的标签不能与viewWithTag:一起找到,所以它将为零。当您试图访问“零”控件的属性时,它可能会使您崩溃。
检查您的标签是否为零,并检查它是否使用
if(countLabel != nil && [countLabel isKindOfClass:[UILabel class]])
[countLabel setText:@"newLabel"];
else
NSLog(@"countLabel is not found");viewWithTag:将搜索接收方层次结构中的视图,其标记属性与标记参数中的值匹配。这将返回第一个控件,它将在层次结构中遇到标记。因此,确保您的标记需要在整个视图中如此独特。只需确保您是给标签的直系亲属,而不是self.view。
编辑:
如果您无法跟踪问题,也可以尝试这样做。
for (UIView *child in self.view.subviews) {
if([child isKindOfClass:[UILabel class]] && [child tag] == numOfTag)
{
[child setText:@"newLabel"];
break;
}
}https://stackoverflow.com/questions/19898589
复制相似问题