2009-08-01 39 views
6

Tôi sẽ có lưới 10x10 đối tượng UIButton. Mỗi UIButtons sẽ cần được tham chiếu bởi số hàng và cột, vì vậy chúng có thể được lưu trữ trong một số loại mảng.Cách tốt nhất để xây dựng lưới 10x10 của UIButtons?

Câu hỏi của tôi: cách dễ nhất để tạo lưới này là gì? Lập trình hoặc thông qua Trình tạo giao diện? Nếu lập trình, cách nào sẽ là cách dễ nhất để truy cập các nút này để khi chúng được chạm, Tôi có thể biết số hàng và cột của nút được chạm?

Trả lời

13

Cá nhân tôi không thích IB, vì vậy tôi khuyên bạn nên làm điều đó theo chương trình!

Sử dụng NSArray để lưu trữ UIButton's. Chỉ số của mỗi nút là row*COLUMNS+column.

Thiết lập thuộc tính thẻ để CƠ SỞ + index (BASE là một giá trị tùy ý> 0) để bạn có thể tìm thấy vị trí của một nút: 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

Đây đúng là loại câu trả lời tôi đang tìm kiếm. Tôi không biết rằng tài sản "tag" thậm chí còn tồn tại ... đó là một trợ giúp rất lớn. Cảm ơn bạn rất nhiều squelart, tôi đánh giá cao câu trả lời kỹ lưỡng! –

+0

'chào mừng. "tag" khá hữu ích, vâng. Thông báo UIView "viewWithTag:" có thể được sử dụng để tìm một chế độ xem phụ theo thẻ, ví dụ: button = [view viewWithTag: index] (nhưng nó sẽ chậm hơn truy cập NSArray). Theo thẻ mặc định == 0, đó là lý do tôi thêm số BASE, trong trường hợp có các nút hoặc chế độ xem anh chị em. – squelart

+0

Vâng, thẻ rất tiện dụng. Bạn có thể sử dụng chúng làm số nhận dạng trực tiếp. Bạn có thể sử dụng chúng cho tra cứu từ điển (sau khi chuyển đổi sang NSNumber). Bạn có thể sử dụng chúng để chọn chế độ xem ngẫu nhiên - một cái gì đó như viewWithTag: (arc4random()% 8) – Amagrammer

8

Bạn có thể sử dụng một GridView từ moriarty library để giúp đỡ với bố cục - định vị từng nút mà bạn muốn. Xây dựng một phần trên mã mẫu squelart như một createButtonAtRow: col: phương pháp, điều này có thể làm việc như sau:

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. 
Các vấn đề liên quan