Создание определенного количества уникальных объектов одним методом - PullRequest
1 голос
/ 04 ноября 2010

Это то, что я просто никогда не мог разузнать ...

Допустим, я строю сетку из 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 ]

2 голосов
/ 04 ноября 2010

Вы имеете в виду:

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];
        }
    }
1 голос
/ 04 ноября 2010
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];
    }
}
...