簡體   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