0

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

4

5 回答 5

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,它为您声明了一些好东西,并自动将您的类设置为符合两个相关协议(UITableViewDelegateUITableViewDataSource)。然后,您需要覆盖提供有关您的表的信息的方法。

- (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
于 2013-04-03T16:58:37.573 回答
0

iOS 表格只有一列,因此每一行都是一个单元格。您可以使用多个按钮填充每个单元格,并使其看起来像多列。还要查找 UICollectionView。

您需要以编程方式创建 UIButton,如下所示:

如何以编程方式创建基本的 UIButton?.

于 2013-04-03T16:42:31.547 回答
0

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

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

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

于 2013-04-03T16:47:51.690 回答
0
  1. 获取width屏幕。

  2. 获取height屏幕。

  3. 分别找到每个按钮w和。hwidth/15height/20

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

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

  6. 用 x=0*width, y=0*height, width, height 制作框架

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

  8. 下一个 c 循环

  9. 下一个 r 循环

于 2013-04-03T16:49:08.767 回答
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

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

于 2013-04-03T17:02:48.447 回答