我正在创建一个单词搜索游戏,使用按钮来存储字母,我需要创建一个具有一定数量的列和行的表。因此,如果表格应该是15 x 20,我有一个用于tableWidth和tableHeight的ivar,我需要制作300个按钮并将它们放在视图上。我不能使用界面构建器,所以我不确定如何创建按钮并将它们放在视图上。有没有人对我有任何指示?如果我需要更好地解释,请告诉我。
答案 0 :(得分:1)
UITableView
。我将在下面留下我的原始答案,因为这是一个很好的方法(特别是如果不是所有按钮当前都可见),但你也可以做一些简单的事情:
for (int i = 0; i < NUMBER_OF_ROWS; ++i) {
for (int j = 0; j < NUMBER_OF_COLUMNS; ++j) {
UIButton *newButton = [[UIButton alloc] init];
newButton.frame = ... // Calculate frame based on i and j
// Customize other behavior of the button (appearance, targets, etc) based on i and j
[superviewToAddButtonTo addSubview:newButton];
// If not using ARC: [newButton release];
}
}
UITableView
会让人感到困惑。
首先要创建UITableViewController
的自定义子类,它为您声明了一些不错的东西,并自动将您的类设置为符合两个相关协议(UITableViewDelegate
和{{ 1}})。然后,您需要覆盖提供有关表的信息的方法。
UITableViewDataSource
您可以执行各种其他操作来自定义表,但这应该为您提供所需的基本功能。因此,为了实际将其中一个添加到您的应用中,您可以这样做:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
cellIdentifier = @"Cell";
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier]; // if you're not using ARC, make sure to autorelease...
for (int i = 0; i < NUMBER_OF_COLUMNS; ++i) {
UIButton *newButton = [[UIButton alloc] init];
// Set the frame and customize the button in other ways, and then...
[cell addSubview:newButton];
// If you're not using ARC, make sure to release...
}
}
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return NUMBER_OF_ROWS;
}
答案 1 :(得分:0)
iOS表只有一列,因此每行都是一个单元格。您可以使用多个按钮填充每个单元格,并使其看起来像多个列。还要查找UICollectionView。
您需要以编程方式创建UIButtons,如下所示:
答案 2 :(得分:0)
UIButton是一个视图(UIView)。以编程方式创建它,给它一个框架(您必须为每个按钮计算),并将其作为子视图添加到整个网格视图。
如果你不知道UIView是什么,如何让一个UIView成为另一个的子视图,视图定位如何工作等等(例如框架是什么),请阅读我的书:
答案 3 :(得分:0)
获取width
屏幕。
获取height
屏幕。
分别针对每个按钮w
和h
查找width/15
和height/20
。
循环r = 0到14步+1转到步骤5.
循环c = 0到19步+1转到步骤6.
制作x = 0 *宽度的框架,y = 0 *高度,宽度,高度
使用上面的框架制作一个按钮,根据需要设置标题,目标/操作。
下一个c循环
下一个循环
答案 4 :(得分:0)
如果您不想使用UITableView,我建议将自定义视图容器与其中的按钮组合在一起。
循环遍历行和列,并将UIButtons作为子视图添加到主视图中。你必须通过他们的框架处理UIButton的位置,并调整它们的高度/宽度以适应网格。这是一些狡猾的伪代码:
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic) NSMutableArray *buttons;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 320 x 460 for regular iPhone screen size
// 320 / 8 = 40 px width
// 460 / 10 = 46 px tall
// 8 * 10 = 80 buttons
double width = 40.0;
double height = 46.0;
double xOffset = 0.0;
double yOffset = 0.0;
int rowCount = 0;
int columnCount = 0;
for(int i = 0; i < 80; i++) {
xOffset = columnCount * width;
yOffset = rowCount * height;
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(xOffset, yOffset, width, height);
button.tintColor = [UIColor redColor];
[self.view addSubview:button];
columnCount++;
if (columnCount == 8)
columnCount = 0;
if (i == 9 ||
i == 19 ||
i == 29 ||
i == 39 ||
i == 49 ||
i == 59 ||
i == 69 ||
i == 79)
rowCount++;
}
}
@end
我确信这可以大大改进,但它会在指定的尺寸上绘制一个按钮网格。