2013-04-03 83 views
0

我正在創建一個使用按鈕來存儲字母的單詞搜索遊戲,並且我需要創建一個具有一定數量的列和行的表格。所以如果桌子應該是15 x 20,我有桌子寬度和tableHeight ivar,我需要製作300個按鈕並將它們放在視圖上。我無法使用界面生成器,所以我不確定我將如何創建按鈕並將它們放置在視圖上。有沒有人對我有任何指點?如果我需要更好地解釋它,請告訴我。創建寬度和高度的按鈕表

+0

當你說「表」你只是一個大網格,對吧?你不是在說UITableView,對吧? – matt

+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,它爲你聲明瞭一些很好的東西,並自動將你的類設置爲符合兩個相關協議(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 
0

iOS表只有一列,所以每行都是一個單元。您可以使用多個按鈕填充每個單元格,並使其看起來像多列。另請查看UICollectionView。

你需要以編程方式創建UIButtons爲:

How do I create a basic UIButton programmatically?

+0

我不需要一個tableView,我只是將這組按鈕當成一個表。 –

0

UIButton是一個視圖(UIView)。以編程方式創建它,給它一個框架(您將必須爲每個按鈕計算),並將其作爲子視圖添加到整個網格視圖中。

如果你不知道一個UIView是什麼,如何使一個UIView的另一個子視圖,視圖的定位是如何工作的,等等(如什麼是幀),讀我的書:

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

0
  1. 獲取屏幕的width

  2. 獲取屏幕的height

  3. 分別爲每個按鈕width/15height/20查找wh

  4. 迴路R = 0至14的步驟1轉到步驟5.

  5. 循環C = 0〜19中的步驟1轉到步驟6.

  6. 製作,其中x = 0 *寬度幀, y = 0 *高度,寬度,高度

  7. 使用上述框架製作按鈕,根據需要設置標題,目標/動作。

  8. 下一個C環

  9. 下一個R環

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 

這可以極大地改善,我敢肯定,但它會繪製規定的尺寸按鈕的網格。