2012-11-29 58 views
14
-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
    imageView.image = [UIImage imageNamed:@"Sample.png"]; 
    [self.view addSubview:imageView]; 
    NSArray *subviews = [self.view subviews]; 
    for(id element in subviews) { 
     if ([[element class] isKindOfClass:[UIImageView class]]) //check if the object is a UIImageView 
     { 
     NSLog(@"element is a UIImageView\n"); 
     [element setCenter:CGPointMake(500., 500.)]; 
     } else { 
     NSLog(@"element is NOT a UIImageView\n"); 
     } 
    } 
} 

我預期的輸出是「元素是一個UIImageView,但它實際上是元素不是一個UIImageView爲什麼這是不是還有其他的。子視圖只有一個。此外,在運行時,圖像以100,100顯示,不500,500如預期使用isKindOfClass:?我不明白爲什麼這個代碼是表現這樣

+0

我試着簡單的改變代碼來使用UIImageView而不是id,結果是一樣的。可以使用 –

+1

id作爲參考。你錯過的是你以錯誤的方式調用isKindOfClass方法。檢查我的答案。 –

回答

44

你的支票是錯的。您應該在對象上調用isKindOfClass:,而不是在對象的類上。

[element isKindOfClass:[UIImageView class]] 
+0

+1。這是這個問題。 – iDev

+0

謝謝!現在你提到它,很明顯!我在調試器中檢查它,調試器顯示UIImageView,這真的讓我很沮喪。我只是看着代碼的錯誤部分進行調試。再次感謝。 –

+0

很明顯,但方法的名稱很混亂。在英語中,「是」一詞意味着身份。我確信那就是我脫軌的地方。方法名應該是-isInstanceOfClass:相反,如果你問我。 –

0

試試下面的代碼

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
    imageView.image = [UIImage imageNamed:@"Sample.png"]; 
    [self.view addSubview:imageView]; 
    NSArray *subviews = [self.view subviews]; 
    for(UIView *view in subviews) { 
     if ([view isKindOfClass:[UIImageView class]]) //check if the object is a UIImageView 
     { 
     NSLog(@"element is a UIImageView\n"); 
     [element setCenter:CGPointMake(500., 500.)]; 
     } else { 
     NSLog(@"element is NOT a UIImageView\n"); 
     } 
    } 
} 

您還可以檢查標籤值的子視圖。:

initially set imageView.tag=101; //anything you want 

for(UIView *subview in [view subviews]) { 
    if(subview.tag== 101)/*your subview tag value here*/ 
    { 

NSLog(@"element is a UIImageView\n"); 
    } else { 
     NSLog(@"element is NOT a UIImageView\n"); 
    } 
} 
+0

那是因爲我沒有投它? –

+0

沒關係。這不起作用。標記想法可能不適用於我的項目,除非我對所有圖像使用相同的標記。將有未知數量的圖像未知壽命。 –

+0

我剛編輯我的答案'if([view isKindOfClass:[UIImageView class]])'立即檢查。 –

相關問題