[英]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.