Best way to build 10x10 grid of UIButtons?

后端 未结 2 922
深忆病人
深忆病人 2021-02-02 04:28

I\'m going to have a 10x10 grid of UIButton objects. Each of these UIButtons is going to need to be referenced by the row and column number, so they should probably be stored in

相关标签:
2条回答
  • 2021-02-02 04:38

    I personally don't like IB, so I recommend to do it programmatically!

    Use an NSArray to store your UIButton's. Each button's index is row*COLUMNS+column.

    Set the tag property to BASE+index (BASE being an arbitrary value > 0) so that you can find a button's position: index=tag-BASE; row=index/COLUMNS; column=index%COLUMNS;

    - (void)loadView {
        [super loadView];
    
        for (NSInteger row = 0; row < ROWS; row++) {
            for (NSInteger col = 0; col < COLS; col++) {
                UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
                [buttonArray addObject:button];
                button.tag = BASE + row * COLS + col;
                button.frame = ...;
                [button addTarget:self action:@selector(didPushButton:) forControlEvents:UIControlEventTouchDown];
                [self.view addSubview:button];
            }
        }
    }
    
    - (void)didPushButton:(id)sender {
        UIButton *button = (UIButton *)sender;
        NSInteger index = button.tag - BASE;
        NSInteger row = index / COLS;
        NSInteger col = index % COLS;
        // ...
    }
    
    0 讨论(0)
  • 2021-02-02 04:56

    You can use a GridView from the moriarty library to help with layout - positioning each button where you want it. Building partially on squelart's sample code as a createButtonAtRow:col: method, this could work as follows:

    GridView* gridview = [[GridView alloc] initWithRows:ROWS cols:COLS];
    for (NSInteger row = 0; row < ROWS; ++row) {
      for (NSInteger col = 0; col < COLS; ++col) {
        [gridView addsubView:[self createButtonAtRow:row col:col]];
      }
    }
    [myView addSubview:gridView];
    [gridView release];  // Let myView retain gridView.
    
    0 讨论(0)
提交回复
热议问题