Xcode: изменить строку для зацикливания кнопок - PullRequest
1 голос
/ 11 февраля 2012

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

Когда начинается второй и третий ряд, у меня только одна кнопка.Нет ошибок, только кнопки друг на друге в последних строках.

-(void)viewDidLoad {
int numba=0;
int x=-20;
int y=20;

for(int i = 1; i <= 200; ++i) {


    numba ++;


    if (numba <16) {

        x =x+20;

    } else if (numba >16 && numba <26){
        x=-20;
        x = x + 20;
        y=40;

    } else if (numba >26 && numba <36){
        x=-20;
        x =x+20;
        y=60;

    } else {
        x=-20;
        x =x+20;
        y=80;
    }



    UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(x, y, 20, 20);


    NSLog(@"numba = %d",numba);
    NSLog(@"x = %d",x);




    btn.tag = numba;
    [btn setTitle:[NSString stringWithFormat: @"%d", numba] forState:UIControlStateNormal];

    [self.view addSubview:btn];


    }

}

1 Ответ

0 голосов
/ 11 февраля 2012
  1. Если вы хотите создать двумерную сетку, лучше всего использовать вложенные циклы, а не пытаться быть умными с помощью одного цикла.

  2. Не разбрасывайте постоянные числа по всему коду. Вы можете определить символические константы в методе или функции.

Вот как бы я это сделал:

- (void)viewDidLoad {
    static const CGFloat ButtonWidth = 20;
    static const CGFloat ButtonHeight = 20;
    static const CGFloat RowWidth = 320;

    int buttonNumber = 0;

    for (CGFloat y = 0; buttonNumber < 200; y += ButtonHeight) {
        for (CGFloat x = 0; buttonNumber < 200 && x + ButtonWidth <= RowWidth; x += ButtonWidth) {
            ++buttonNumber;
            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            button.frame = CGRectMake(x, y, ButtonWidth, ButtonHeight);
            button.tag = buttonNumber;
            [button setTtle:[NSString stringWithFormat:@"%d", buttonNumber] forState:UIControlStateNormal];
            [self.view addSubview:button];
        }
    }
}
...