创建宽度和高度的按钮表

时间:2013-04-03 16:32:17

标签: ios uibutton

我正在创建一个单词搜索游戏,使用按钮来存储字母,我需要创建一个具有一定数量的列和行的表。因此,如果表格应该是15 x 20,我有一个用于tableWidth和tableHeight的ivar,我需要制作300个按钮并将它们放在视图上。我不能使用界面构建器,所以我不确定如何创建按钮并将它们放在视图上。有没有人对我有任何指示?如果我需要更好地解释,请告诉我。

5 个答案:

答案 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,如下所示:

How do I create a basic UIButton programmatically?

答案 2 :(得分:0)

UIButton是一个视图(UIView)。以编程方式创建它,给它一个框架(您必须为每个按钮计算),并将其作为子视图添加到整个网格视图。

如果你不知道UIView是什么,如何让一个UIView成为另一个的子视图,视图定位如何工作等等(例如框架是什么),请阅读我的书:

http://www.apeth.com/iOSBook/ch14.html

答案 3 :(得分:0)

  1. 获取width屏幕。

  2. 获取height屏幕。

  3. 分别针对每个按钮wh查找width/15height/20

  4. 循环r = 0到14步+1转到步骤5.

  5. 循环c = 0到19步+1转到步骤6.

  6. 制作x = 0 *宽度的框架,y = 0 *高度,宽度,高度

  7. 使用上面的框架制作一个按钮,根据需要设置标题,目标/操作。

  8. 下一个c循环

  9. 下一个循环

答案 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

我确信这可以大大改进,但它会在指定的尺寸上绘制一个按钮网格。