2013-08-01 4 views
1

내가 모르는 개체가 UILabel, UIImageView 또는 UIButton 일 수 있습니다. 나는 if 상태를 사용하여 세 가지를 모두 확인하고 있습니다.알 수없는 클래스 유형으로 ID를 변환하고 해당 프레임을 가져옵니다.

if([obj2 isKindOfClass:[UIImageView class]]) 
    { 
     [(UIImageView*)obj2 setFrame:frame]; 
    } 
    else if ([obj2 isKindOfClass:[UILabel class]]) 
    { 
     [(UILabel*)obj2 setFrame:frame]; 
    } 
    else 
    { 
     [(UIButton*)obj2 setFrame:frame]; 
    } 

내 질문에 내가 다시 id 유형 자산 frame이없는 그 프레임을 얻을 수있는 방법이다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

+1

'UIView' 대신'id'의? – Amar

답변

4

이러한 모든 클래스는 공통 조상을 공유합니다. UIView. 그래서 맹목적으로 UIViewid을 던져 자신을 노크 :

UIView *obj2View = (UIView *)obj2; 
obj2View.frame = CGRectMake(x, y, w, h); 
CGRect r = obj2View.frame; 
2

당신은 수행하여 UIView로 전송할 수 있습니다 : 이미 일을 할 것

[(UIView *)obj2 frame] 

, 나는 문제가 무엇인지 표시되지 않는 이유는 무엇입니까? 또는 'id'가 UIView의 서브 클래스로 보장되는 경우, 예를 들어 보이는 것처럼 보이지만, 먼저 id 대신 UIView을 사용하십시오.

0

주조없이 작동합니다. 이 시도. 그것은 내 목표에서 일하고있다. :

+0

수동 입력 방식이 가장 좋습니다. 컴파일러에 맡기지 말고 자신을 버릇 없게 만듭니다. – CodenameLambda1

+0

프로그래머가 obj2가 UILabel, UIImageView 또는 UIButton 객체 중 하나에 속한다는 것을 알고 있다면 그 객체에서 무엇이 잘못 되었습니까? –

관련 문제