Iphone 构建10x10 UIButtons网格的最佳方法?

Iphone 构建10x10 UIButtons网格的最佳方法?,iphone,objective-c,Iphone,Objective C,我将有一个10×10的UIButton对象网格。这些UIButton中的每一个都需要由行号和列号引用,因此它们可能应该存储在某种类型的数组中 我的问题:创建此网格的最简单方法是什么?是通过编程还是通过界面生成器?如果以编程方式,那么访问这些按钮的最简单方式是什么,以便在触摸按钮时,我能够知道触摸按钮的行数和列数?我个人不喜欢IB,因此我建议以编程方式操作 使用NSArray存储您的UIButton。每个按钮的索引都是行*列+列 将tag属性设置为BASE+index(BASE是一个任意值>0),

我将有一个10×10的UIButton对象网格。这些UIButton中的每一个都需要由行号和列号引用,因此它们可能应该存储在某种类型的数组中


我的问题:创建此网格的最简单方法是什么?是通过编程还是通过界面生成器?如果以编程方式,那么访问这些按钮的最简单方式是什么,以便在触摸按钮时,我能够知道触摸按钮的行数和列数?

我个人不喜欢IB,因此我建议以编程方式操作

使用NSArray存储您的UIButton。每个按钮的索引都是
行*列+列

将tag属性设置为BASE+index(BASE是一个任意值>0),以便可以找到按钮的位置:
index=tagbase;行=索引/列;列=索引%列

- (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;
    // ...
}
-(无效)加载视图{
[超级加载视图];
对于(NSInteger行=0;行<行;行++){
对于(NSInteger col=0;col
您可以使用中的GridView来帮助进行布局——将每个按钮放置在您想要的位置。部分基于squelart的示例代码作为CreateButtonNatrow:col:方法构建,其工作原理如下:

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.
GridView*GridView=[[GridView alloc]initWithRows:ROWS-cols:cols];
对于(NSInteger行=0;行<行;++行){
对于(NSInteger col=0;col
这正是我想要的答案。我甚至不知道“标签”属性的存在。。。这是一个巨大的帮助。非常感谢你,斯奎拉特,我感谢你的详尽回答欢迎“标签”很有用,是的。UIView消息“viewWithTag:”可用于按标记查找子视图,例如按钮=[view viewWithTag:index](但它比NSArray访问速度慢)。默认标记==0,这就是为什么我添加了基数,以防有兄弟按钮或视图。是的,标记非常方便。您可以将它们用作直接标识符。您可以使用它们进行字典查找(转换为NSNumber后)。您可以使用它们随机选择一个视图--类似于viewWithTag:(arc4random()%8)