2012-02-10 7 views
1

下のコードを使用して200個のボタンをループし、行が一杯になったときに行をノッチダウンします。 私のやり方がうまくいくので、もっと良い方法があるはずです。Xcode:ループボタンの行を変更する

2番目と3番目の行が始まるときに、1つのボタンがあります。最後の行のボタンだけがエラーになりません。

-(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]; 


    } 

}

答えて

0
  1. あなたは2次元のグリッドを作成したい場合には、それはだけではなく、単一のループとの巧妙なことしようとしているのネストされたループを使用することをお勧めします。

  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]; 
     } 
    } 
} 
関連する問題