Как ссылаться на идентификатор объектов с переменной?

78
10

Это мой код, который происходит 48 раз (по одному для каждой кнопки в календаре).


calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
[a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
[self.view addSubview:a1];

Я хочу сделать это в "цикл цикла", изменив "a1" на "a2", "a3" и т.д., чтобы сократить количество кода. Я полагаю, что я могу сократить его до 6 дюймов для петель.


Как мне получить "a1" s как переменную, которую я могу ссылаться не только на код выше, но и на "цикл цикла"? (цикл for будет примерно таким:)


for(int i = 0, j=75; i < 7; i++, j+=75);

Я знаю, что мне нужно конкатенировать "a" с целым числом "i", но как поместить его в сообщение?

спросил(а) 2021-01-19T22:10:51+03:00 6 месяцев назад
1
Решение
89

Ваш код будет создавать 48 разных кнопок, даже если вы используете одну и ту же (локальную) переменную:


for (int i = 0; i < 48; i++){
calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
[a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
[self.view addSubview:a1];
}

Если вы хотите сохранить ссылку на кнопки, вы можете сохранить их в массиве:


self.buttons = [NSMutableArray array];
for (int i = 0; i < 48; i++){
calenderButton *a1 = [calenderButton buttonWithType:UIButtonTypeCustom];
[a1 makeFrame:CGRectMake(75, 50, 70, 70) number:1 color:[UIColor orangeColor]];
[self.view addSubview:a1];
[self.buttons addObject:a1];
}

И получите доступ к ним позже:

calenderButton *button = [self.buttons objectAtIndex:7]; // Or any other index

Примечание. Вы можете использовать указанный цикл:


for(int i = 0, j=75; i < 7; i++, j+=75)

Но я не уверен, что это создаст 48 кнопок.

ответил(а) 2021-01-19T22:10:51+03:00 6 месяцев назад
89

Вы можете поместить свои кнопки в массив, например:


Объявить переменную экземпляра NSMutableArray *allButtons в вашем заголовке, затем...

allButtons = [NSMutableArray array];
for(int i = 0, j=75; i < 7; i++, j+=75) {
calenderButton *cb= [calenderButton buttonWithType:UIButtonTypeCustom];
// Configure the button here...
// use values of i and j to call CGRectMake, or as you see fit
[allButtons addObject:cb];
}

Теперь все ваши кнопки находятся в массиве. Вы можете получить к ним доступ по индексу или любым другим способом, который вам может понадобиться, например. с быстрым циклом перечисления.

ответил(а) 2021-01-19T22:10:51+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема