我正在使用按钮创建一个单词搜索游戏来存储字母,并且我需要创建一个具有一定数量的列和行的表格。因此,如果表格应该是 15 x 20,我有一个用于 tableWidth 和 tableHeight 的 ivar,我需要制作 300 个按钮并将它们放在视图上。我不能使用界面生成器,所以我不确定如何创建按钮并将它们放置在视图上。有人对我有任何指示吗?让我知道是否需要更好地解释它。
5 回答
编辑:我刚刚看到您对另一个您不想使用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
和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;
}
您可以执行其他各种操作来自定义表格,但这应该可以为您提供所需的基本功能。因此,为了实际将其中之一添加到您的应用程序中,您将执行以下操作:
MyTableViewControllerSubclass *tableViewController = [[MyTableViewControllerSubclass alloc] init];
[superViewToAddTableTo addSubview:tableViewController.tableView];
// If you're not using ARC, make sure to release the tableViewController in your dealloc method
iOS 表格只有一列,因此每一行都是一个单元格。您可以使用多个按钮填充每个单元格,并使其看起来像多列。还要查找 UICollectionView。
您需要以编程方式创建 UIButton,如下所示:
UIButton 是一个视图 (UIView)。以编程方式创建它,给它一个框架(您必须为每个按钮计算它),并将其作为子视图添加到您的整体网格视图中。
如果你不知道 UIView 是什么,如何让一个 UIView 成为另一个 UIView 的子视图,视图定位是如何工作的等等(例如什么是框架),请阅读我的书:
获取
width
屏幕。获取
height
屏幕。分别找到每个按钮
w
和。h
width/15
height/20
循环 r=0 到 14 步 +1 转到第 5 步。
循环 c=0 到 19 步 +1 转到第 6 步。
用 x=0*width, y=0*height, width, height 制作框架
如果需要,使用上面的框架制作一个按钮,设置标题,目标/动作。
下一个 c 循环
下一个 r 循环
如果您不想使用 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
我敢肯定,这可以大大改进,但它会在指定的尺寸中绘制一个按钮网格。