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;
// ...
}
Đâ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! –
'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
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