2012-11-28 80 views
0

我一直在研究一个应用程序,我在IB中手动创建了一打按钮。我现在想重新开始,并且在代码中做所有事情,因为我需要动态的按钮数量。我还想做其他事情像手动控制,他们出现等等等等在数组中创建UIButton并将它们添加到MainViewController中

MainViewController.h

@property (nonatomic, retain) IBOutlet UIButton *startButton; 
@property (nonatomic, retain) IBOutlet UIButton *stopButton; 
@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *tiles; 
- (IBAction) tilePressed:(id)sender; 
- (void) initTiles; 

MainViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self initTiles]; 
} 

- (void)viewDidUnload 
{ 
    [self setStartButton:nil]; 
    [self setStopButton:nil]; 
    [self setTiles:nil]; 
    [super viewDidUnload]; 
} 

-(void)initTiles 
{ 
//tiles = [[NSMutableArray alloc] initWithCapacity:5]; 

    for (int count = 0; count < 5; count++) 
    { //I used tiles.count here, but that fails 
    UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(count*10+10, 10, 10, 10)]; 
    [b setTitle:[NSString stringWithFormat:@"%i",count+1] forState:UIControlStateNormal]; 
    [b setTag:count]; 
    [b setHidden:NO]; 
    [b addTarget:self action:@selector(tilePressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:b]; 
    } 
} 

-(IBAction)tilePressed:(id)sender { 
    NSLog(@"button pressed: %i", [sender tag]); 
} 

我一直试图做的是只需在屏幕上添加5个按钮。理想情况下,我想创建按钮,将它们放在一个数组(NSMutableArray)中,以便稍后操作它们,然后在MainViewController上投掷tiles。但我甚至没有没有瓷砖对象的控制器的按钮。

编辑:我想我会补充一点,它们属于一个数组并不重要,重要的是我可以稍后与它们进行交互,也就是说,会出现动画和文本变化等等。最初的问题然而,就是他们没有显示在控制器上

回答

3

你的代码实际上完美的作品,但你真的不能说,因为:

  • 按钮是如此之小,他们几乎是不可能的使用
  • 按钮太小,文本标题不会显示
  • 背景颜色为零,所以它默认为清除,这使得整个按钮在这种情况下不可见。

为了明显地,只要按钮更大,改变背景颜色:

-(void)initTiles 
{ 
    //tiles = [[NSMutableArray alloc] initWithCapacity:5]; 

    for (int count = 0; count < 5; count++) 
    { //I used tiles.count here, but that fails 
     UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(count*50+10, 50, 50, 50)]; 
     [b setTitle:[NSString stringWithFormat:@"%i",count+1] forState:UIControlStateNormal]; 
     [b setTag:count]; 
     [b setHidden:NO]; 
     [b addTarget:self action:@selector(tilePressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [b setBackgroundColor:[UIColor purpleColor]]; 
     [self.view addSubview:b]; 
    } 
} 

现在,只要将它们添加到阵列:

-(void)initTiles 
{ 
    self.tiles = [[NSMutableArray alloc] initWithCapacity:5]; 

    for (int count = 0; count < 5; count++) 
    { //I used tiles.count here, but that fails 
     UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(count*50+10, 50, 50, 50)]; 
     [b setTitle:[NSString stringWithFormat:@"%i",count+1] forState:UIControlStateNormal]; 
     [b setTag:count]; 
     [b setHidden:NO]; 
     [b addTarget:self action:@selector(tilePressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [b setBackgroundColor:[UIColor purpleColor]]; 
     [self.tiles addObject:b]; 
     [self.view addSubview:b]; 
    } 
} 

然后,您可以通过使用数组访问按钮!

+0

我不觉得自己像一个昏暗的机智大声笑。谢谢你:) – Madivad

+0

不用担心,直到你知道它并不明显! :-) – lnafziger

相关问题