Создание определенного количества уникальных объектов одним методом
Это то, что я просто никогда не мог заставить себя думать...
Допустим, я строю сетку из 8 UIViews в ширину и 8 UIViews в высоту. Это может быть установлено любым x, y. Это не должно быть 8 х 8. Давайте просто будем произвольными и придерживаться этого пока.
Этот метод init (часть подкласса UIView) генерирует строку шириной 8 UIViews:
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
int x = 1;
int y = 1;
//row 01
UIView* row01Square01 = [[UIView alloc] initWithFrame:CGRectMake((0*x), (0*y), x, y)];
[self addSubview:row01Square01];
UIView* row01Square02 = [[UIView alloc] initWithFrame:CGRectMake((1*x), (0*y), x, y)];
[self addSubview:row01Square02];
UIView* row01Square03 = [[UIView alloc] initWithFrame:CGRectMake((2*x), (0*y), x, y)];
[self addSubview:row01Square03];
UIView* row01Square04 = [[UIView alloc] initWithFrame:CGRectMake((3*x), (0*y), x, y)];
[self addSubview:row01Square04];
UIView* row01Square05 = [[UIView alloc] initWithFrame:CGRectMake((4*x), (0*y), x, y)];
[self addSubview:row01Square05];
UIView* row01Square06 = [[UIView alloc] initWithFrame:CGRectMake((5*x), (0*y), x, y)];
[self addSubview:row01Square06];
UIView* row01Square07 = [[UIView alloc] initWithFrame:CGRectMake((6*x), (0*y), x, y)];
[self addSubview:row01Square07];
UIView* row01Square08 = [[UIView alloc] initWithFrame:CGRectMake((7*x), (0*y), x, y)];
[self addSubview:row01Square08];
}
return self;
}
Можно ли написать метод, который мог бы использовать этот код (с изменениями, конечно) для генерации последующих 7 строк UIViews? Еще лучше, возможно ли использовать 1 строку для генерации всех 64 представлений пользовательского интерфейса?
Я экспериментировал с использованием цикла for, while, do, но я признаю, что совершенно заблудился, когда дело доходит до того, можете ли вы передать строку в качестве аргумента методу init.
Заранее спасибо за любое понимание этого.
2 ответа
Ты имеешь ввиду:
for (int i=0;i<8;i++) {
UIView* square = [[UIView alloc] initWithFrame:CGRectMake((i*x), (0*y), x, y)];
[self addSubview:square];
}
Или (для всех строк):
for(int r=0;r<8;r++) {
for (int i=0;i<8;i++) {
UIView* square = [[UIView alloc] initWithFrame:CGRectMake((i*x), (r*y), x, y)];
[self addSubview:square];
}
}
int numberOfRows = 8;
int numberOfColumns = 8;
for (int j = 0; j<numberOfRows;j++){
for (int i=0;i<numberOfColumns;i++) {
UIView* square = [[UIView alloc] initWithFrame:CGRectMake((i*x), (j*y), x, y)];
[self addSubview:square];
}
}