2014-11-20 3 views
0

나는 모든 버튼에 이미지를 설정하는 더 좋은 방법을 찾고있다. 지금은 for 루프를 사용하고 있지만 각 버튼을 개별적으로 호출해야합니다. 추악하고 길다.IOS 문자열 변수에서 UIButton 호출하기

@property (weak, nonatomic) IBOutlet UIButton *box0; 
@property (weak, nonatomic) IBOutlet UIButton *box1; 
// up to 150 of them on the page 
@property (weak, nonatomic) IBOutlet UIButton *box150; 

@end 

@implementation HelpTwo 
{ 
    bool checked0; 
    bool checked1; 
    bool checked2; 
    bool checked3; 
} 

문제의 부분

내가 대신 할 노력하고 있지만

NSArray *boxes = [draftboxeschecked componentsSeparatedByString:@","]; 

for (NSString *boxNumber in boxes) { 

    NSString *modifiedBox = [NSString stringWithFormat:@"_box%@",boxNumber]; 
    bool check = [NSString stringWithFormat:@"checked%@",boxNumber]; 

    [modifiedBox setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
    check = YES; 
} 

EDIT 작동하지 않습니다 무엇

NSArray *boxes = [draftboxeschecked componentsSeparatedByString:@","]; // pulled from DB and as an example could be 0,1,8,19,29 NSInteger i; for (i=0; i < boxes.count; i++) { NSString *box = boxes[i]; if ([box isEqualToString:@"0"]) { [_box0 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; checked0 = YES; } else if ([box isEqualToString:@"1"]) { [_box1 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; checked1 = YES; } else if ([box isEqualToString:@"2"]) { [_box2 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; checked2 = YES; } else if ([box isEqualToString:@"3"]) { [_box3 setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; checked3 = YES; } // all the way to 150 

:

이미지에 효과가있는 것 같습니다. 여전히 부울 값을 추가해야합니다. 모든 버튼을 IBOutletCollection에 추가하고 각각에 태그 번호를 설정했습니다. 콜렉션은 buttonCollection입니다.

NSArray *boxes = [draftboxeschecked componentsSeparatedByString:@","]; 

for (NSString *boxNumber in boxes) { 

    for (UIButton *button in _buttonCollection) { 
     if (button.tag == boxNumber.intValue) { 
      // set image 
      [button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
     } 
    } 


} 
+0

코드에서 문제가 몇 가지 있습니다. NSString은 setImage를 지원하지 않습니다. 2. 루프에서 로컬 변수를 생성하고 있습니다. 외부에서 수행해야합니다. 3. 검사는 불량이지만 NSString 을 할당하십시오. 4. 검사하지 않습니다. 코드에 너무 많은 문제가 있습니다. . 어쩌면 더 많은 코드를 게시하여 명확하게 만들 수 있으며, 달성하려는 내용을 더 잘 설명 할 수 있습니다. – dogsgod

+0

IB에 150 개의 버튼이 있습니까? 해결책은 태그를 사용하고 태그를 기반으로 적절한 버튼을 얻는 것입니다. 단추가 삽입 된 UITableView 사용을 고려해 보셨습니까? 이것은 uiviewcontroller에서 150 개의 버튼을 생성하는 효율적인 방법이 아닙니다. – Vig

+0

uiviewcontroller는 클릭 할 때 체크 박스 역할을하는 150 개의 버튼을 가지고 있습니다. 해당 페이지에서 옵션을 선택하기위한 것입니다. 내가 작업하고있는 부분은 "초안"을 저장하고 나중에 다시 돌아가고 싶습니다. 올바른 이미지를 설정했는지 (선택되어 있거나 선택되어 있지 않은지)입니다. 부울은 세그먼트를 선택하여 어느 상자를 선택했는지 알 수 있도록합니다 배열 – JeffK

답변

-1

당신이 사용하는 제품이 확실하지 않습니다. 여기에 해결책이 있습니다 (하지만 필자는 꼭 권장하지는 않습니다). 수표 bool로 무엇을 하려는지 확실하지 않아서 버렸습니다. 1. modifiedBox가있는 NSString입니다 :

NSArray *boxes = [draftboxeschecked componentsSeparatedByString:@","]; 
for (NSString *boxNumber in boxes) { 
    NSString *boxSelectorString = [NSString stringWithFormat:@"box%@", boxNumber]; 
    // Assuming the properties are on the self object, they should create selectors that 
    // match the property name. 
    // Note: I'm not familiar with IBOutlets. 
    UIButton *boxButton = [self performSelector:NSSelectorFromString(boxSelectorString)]; 
    [boxButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
} 
+0

도움 주셔서 감사합니다. 나는 그것을 시도 할 것이지만 버튼은 이미 설정되어있다. 나는 그들을 참조 할 필요가있다. 이것은 이전에 "확인"되어 있고 이것이 부울의 원인 인 경우 이미지를 미리로드하기위한 것입니다. – JeffK

+0

이것은 새로운 버튼을 만들지 않고 HelpTwo의 속성으로 이미 존재하는 버튼에 액세스하기 만합니다. 확인중인 각 버튼을 추적하려는 경우 NSNumber 부울 배열을 추가하거나 NSMutableDictionary –