繁体   English   中英

在Objective-C中类型转换到UILabel

[英]Typecasting to UILabel in Objective-C

我有一个用UILabel制成的NSArray ,我用此语句初始化了它(实际的指针在.h文件中创建):

interLabels = [NSArray arrayWithObjects:inter1,inter2,inter3, nil];

稍后,我有一个IBAction方法,该方法响应并应在单击按钮时更新标签数组:

-(IBAction)intervalButton:(id)sender{
    int count = 0;
    double val[3];
    if(count < 3){
        val[count] = number;
        [interLabels objectAtIndex:count].text = [NSString stringWithFormat:@"%.2f", val[count]];
        count++;
    }
}

但是, [interLabels objectAtIndex:count]似乎没有被识别为UILabel对象,因此出现编译器错误,指出无法在对象类型“ id”上找到属性“ text”。 如何使编译器将其识别为UILabel 这是可以通过类型转换解决的问题吗?

objectAtIndex返回类型为“ id”的引用。 您需要先将其转换为UILabel,然后编译器/ IDE才能识别text属性。

例如((UILabel *)[interLabels objectAtIndex:count])。text = ...

如果将类型id分配给另一个变量,则无需强制转换。 在您的情况下,我认为这样会更好,因为您实际上做了两件事,首先从数组中获取一个对象,然后更改该对象的状态。 考虑一下。

    -(IBAction)intervalButton:(id)sender
    {
        for ( UILabel *label in interLabels )
        { 
            label.text = [NSString stringWithFormat:@"%.2f", number];
        }
    }

我假设您想要一个循环而不是一个if语句,因为if语句始终被评估为YES。 我也假设number是您课堂上的实例变量。

实际上,当我再次查看该代码时,您可能会删除其中的大部分代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM