2012-05-24 2 views
1

UIViewController 하위에 4 개의 "블록"집합이 있습니다. 각 "블록"은 , 하나는 UIImageView이고 하나는 UIView 인 두 명의 자식 인 UIView입니다. 이 모든 것은 인터페이스 빌더에서 생성되며 IBOutlet을 사용하여 클래스에 연결됩니다. - 그것은 네 세트 항상, 그래서 각 블록의 초기화가변수에서 해당 이름으로 UIView 참조

IBOutlet UIView  *block1; 
IBOutlet UILabel  *title1; 
IBOutlet UILabel  *text1; 
IBOutlet UIImageView *image1; 
IBOutlet UIView  *separator1; 

IBOutlet UIView  *block2; 
IBOutlet UILabel  *title2; 
IBOutlet UILabel  *text2; 
IBOutlet UIImageView *image2; 
IBOutlet UIView  *separator2; 

IBOutlet UIView  *block3; 
IBOutlet UILabel  *title3; 
IBOutlet UILabel  *text3; 
IBOutlet UIImageView *image3; 
IBOutlet UIView  *separator3; 

IBOutlet UIView  *block4; 
IBOutlet UILabel  *title4; 
IBOutlet UILabel  *text4; 
IBOutlet UIImageView *image4; 
IBOutlet UIView  *separator4; 

내가 데이터를 동적으로 이러한 UIViews로 설정할 수 받고 있어요 : 내 수업에서

, 나는 해당 회원이 똑같다. 이상적으로, 나는 같은 것을 할 싶습니다

Block *block; 
UIImage *img; 

for(int i=1; i<=4; i++) 
{ 
    block = [response blockNumbered:i]; 

    [<"title"+i> setText:[block getTitle]]; 
    [<"text"+i> setText:[block getText]]; 
    img = [block getImage]; 
    if(img) 
    { 
     [<"image"+i> setImage:img]; 
    } 

    [<"separator"+i> setHidden:![block needSeparator]]; 
} 

(이 실제 생활에서, 코드를 단순화한다는 점에 유의 가까운 200 라인의 코드 4 개 개의 블록의 각각에 대해,이 초기화에 더 많은있다 -하지만 정확히 같은 논리.) 만약 내가 어떻게 든 문자열 변수에 이름이있는 뷰를 참조 할 수 있다면 ... ..

이것을 달성 할 방법이 있습니까?

P. 코드에서 이러한 뷰를 모두 해당 뷰의 배열로 만들 수 있지만 코드의 레이아웃을 수행해야한다는 것을 알았습니다. IB에서이를 수행하고 싶습니다. 또는 UIViews의 배열을 IBOutlet으로 선언하고 IB의 배열에있는 각 요소를 연결하는 방법이 있습니까?

답변

2

당신은 valueForKey:를 사용할 수 있습니다

[[self valueForKey:[NSString stringWithFormat:@"title%d", i]] setText:[block getTitle]]; 
+0

A-하! 정확히 내가 닮은 것 같아. 그것을 시도하고 당신에게 돌아 가자. –

0

로직을 약간 수정하고 태깅에 의존하도록 생각해야합니다. 나중에 subview1.tag = 1001;subview2.tag = 1002;과 같은 모든 하위보기에 태그를 추가하면 태그 값의 모든 하위보기를 반복 할 수 있습니다.

+0

좋아, 그것은 확실히 옵션들 - 함께'으로 [부모 viewWithTag : (INT)]' –

관련 문제