Я ищу лучший способ установить изображения на все мои кнопки. Прямо сейчас я использую цикл 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:@","];
// 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
То, что я пытаюсь сделать, но вместо этого он не работает
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:
Это похоже на работу с изображением. Еще нужно добавить логическое значение. Я добавил все кнопки в 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];
}
}
}
Есть несколько проблем в вашем коде: 1. modifiedBox является NSString. NSString не поддерживает setImage 2. Вы создаете свои локальные переменные в цикле, вы должны сделать это за пределами 3. проверьте, является ли bool, но вы назначаете ему NSString 4. проверка ничего не делает Слишком много проблем в коде , Возможно, вы можете опубликовать больше кода, чтобы он дал понять, или вы лучше описываете, что вы пытаетесь достичь. – dogsgod
У вас есть 150 кнопок на IB? решением было бы использовать тег, а затем получить соответствующую кнопку на основе тега. Рассматривали ли вы использование UITableView с встроенной кнопкой. Это не эффективный способ создания 150 кнопок в uiviewcontroller. – Vig
Увисеконтроллер имеет 150 кнопок, которые действуют как флажки при нажатии. Они предназначены для выбора опций на этой странице. Часть, над которой я работаю, заключается в том, что если они сохраняют «черновик» и хотят вернуться позже, я устанавливаю правильное изображение (отмечено или не проверено). Логическое значение для segue должно знать, какие поля были отмечены, чтобы они могли быть добавлены в массив – JeffK