首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅用标签更改标签

仅用标签更改标签
EN

Stack Overflow用户
提问于 2013-11-11 03:59:07
回答 2查看 117关注 0票数 0

我正在创建一个具有多个按钮和相应标签的应用程序。布局位于一个nib (.xib)文件中,该文件连接到下面代码所在的类。我试图避免对每个标签使用IBOutlet,因为这样会产生大量额外的代码。

我知道有一种使用标签引用标签的方法:

代码语言:javascript
复制
UILabel *countLabel = (UILabel *)[self.view viewWithTag:numOfTag];

我在我的buttonPressed方法中调用了它。但是,当我试图更改文本时

代码语言:javascript
复制
[countLabel setText:@"newLabel"];

应用程序崩溃了。我访问错了吗?我是XCode..Help的新手!

谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-11 04:12:38

这不是正确的做法。首先,当您在XIB文件中创建UILabel时,您只能在那里命名它们--在技术上,您不需要在连接的视图控制器中设置标签值。其次,即使您想在后期重置标签,使用IBOutlets连接它们也是最好的选择。扫描所有子视图,然后找到带有其标记的特定子视图更繁琐,在这种情况下应该避免。

编辑:

对于您需要创建50多个按钮和标签的情况,我建议您创建一个包含UIButton和UILabel的自定义UILabel。然后在要显示它们的视图中,在for循环中创建对象并显示它们。当UIButton被点击时,您将很容易通过自定义UIView对象获取相关的UIView。

票数 0
EN

Stack Overflow用户

发布于 2013-11-11 04:06:23

您的标签不能与viewWithTag:一起找到,所以它将为零。当您试图访问“零”控件的属性时,它可能会使您崩溃。

检查您的标签是否为零,并检查它是否使用

代码语言:javascript
复制
if(countLabel != nil && [countLabel isKindOfClass:[UILabel class]])
    [countLabel setText:@"newLabel"];
else
    NSLog(@"countLabel is not found");

viewWithTag:将搜索接收方层次结构中的视图,其标记属性与标记参数中的值匹配。这将返回第一个控件,它将在层次结构中遇到标记。因此,确保您的标记需要在整个视图中如此独特。只需确保您是给标签的直系亲属,而不是self.view

编辑:

如果您无法跟踪问题,也可以尝试这样做。

代码语言:javascript
复制
for (UIView *child in self.view.subviews) {
    if([child isKindOfClass:[UILabel class]] && [child tag] == numOfTag)
    {
        [child setText:@"newLabel"];
        break;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19898589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档