0

私は、IBで12個のボタンを手動で作成したアプリに取り組んできました。ボタンの数を動的にする必要があるため、ここでもう一度やり直して、すべてをコードで実行したいと思います。また、表示場所を手動で制御するなど、他のこともしたいと思います。

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ます。しかし、タイルオブジェクトがないと、コントローラーにボタンを表示することすらできません。

編集:追加すると思いましたが、それらが配列に属していることは重要ではありません。重要なのは、後でそれらと対話できることです。つまり、アニメーションやチルトルのテキストの変更などがあります。ただし、最初の問題はコントローラに表示されていないということです

4

1 に答える 1

3

コードは実際には完全に機能しますが、次の理由で実際にはわかりません。

  • ボタンは非常に小さいため、使用することはほぼ不可能です。
  • ボタンが非常に小さいため、テキストタイトルが表示されません
  • 背景色はnilであるため、デフォルトでクリアになります。この場合、ボタン全体が非表示になります。

わかりやすくするために、ボタンを大きくして背景色を変更するだけです。

-(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];
    }
}

その後、配列を使用してボタンにアクセスできます。

于 2012-11-28T02:44:19.460 に答える