1

私は開発が初めてで、いくつかのことを行うために、時々本当に奇妙なコードを書きます..たとえば、この場合、1 から 40 までの水平方向の数字リストを表示するためのスクロールビューを作成しました。各数字はボタンです. ユーザーが数字をクリックすると、このボタンの背景画像が変わり、別のボタンをクリックすると、新しいボタンの背景も変わります (ただし、最初のボタンは初期状態に戻ります)。タブバーのように...

そのために、同じコードを(ボタンごとに)40回作成しました:

- (IBAction)Bouton1:(id)sender  {

UIImage *buttonImageOn = [UIImage imageNamed:@"fond-footer-motif-rollover.png"];
UIImage *buttonImageOff = [UIImage imageNamed:@"fond-footer-motif.png"];
[sender setBackgroundImage:buttonImageOn forState:UIControlStateNormal];

[_button2 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button3 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button4 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button5 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button6 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button7 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button8 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button9 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button10 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button11 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button12 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button13 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button14 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button15 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button16 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button17 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button18 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button19 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button20 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button21 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button22 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button23 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button24 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button25 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button26 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button27 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button28 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button29 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button30 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button31 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button32 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button33 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button34 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button35 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button36 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button37 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button38 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button39 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button40 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
}

- (IBAction)Bouton2:(id)sender {  

UIImage *buttonImageOn = [UIImage imageNamed:@"fond-footer-motif-rollover.png"];
UIImage *buttonImageOff = [UIImage imageNamed:@"fond-footer-motif.png"];
[sender setBackgroundImage:buttonImageOn forState:UIControlStateNormal];

[_button1 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
//[_button2 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button3 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button4 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button5 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button6 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button7 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button8 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button9 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button10 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button11 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button12 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button13 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button14 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button15 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button16 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button17 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button18 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button19 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button20 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button21 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button22 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button23 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button24 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button25 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button26 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button27 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button28 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button29 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button30 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button31 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button32 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button33 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button34 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button35 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button36 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button37 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button38 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button39 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
[_button40 setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
}

ボタンをクリックすると、他のすべてが変更されます..どうすればより良いコードを書くことができますか?

4

5 に答える 5

2

まず、すべてのボタンを同じIBActionに接続できるため、アクションを 40 回も記述する必要はありません。さらに単純化するには、sth を使用できます。このような:

すべてのボタンを接続して、次のようにコードを変更するとしIBOutletCollectionましょう。allButtonsNSArray

- (IBAction)buttonTouched:(id)sender  {

    UIImage *buttonImageOn = [UIImage imageNamed:@"fond-footer-motif-rollover.png"];
    UIImage *buttonImageOff = [UIImage imageNamed:@"fond-footer-motif.png"];


    for (UIButton *button in self.allButtons)
    {  
        [button setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
    }

    [sender setBackgroundImage:buttonImageOn forState:UIControlStateNormal];
}
于 2012-11-02T08:05:18.290 に答える
1

ボタンを格納する配列を定義できます。

@property (strong, nonatomic) NSMutableArray *buttons;

次に、配列を初期化し、ボタンを動的に格納します。

self.buttons = [[NSMutableArray alloc] init];
for (int i = 0; i < 40; i++) {
   // ...
   Button *button = [[Button alloc] initWithFrame:frame];
   button.tag = i;
   [self.buttons addObject:button];
}

後で、タグ (index) によって任意のボタンにアクセスできます。

int index = 25;
Button *button = [self.buttons objectAtIndex:index];

in ボタンはtag、たとえば、ジェスチャ レコグナイザーまたはタッチ イベントをボタンにフックするときに、ユーザーがどのボタンをクリックしたかを示します。

于 2012-11-02T08:07:00.707 に答える
0

各ボタンにタグを付けます。ボタン番号 1 はタグ 1 を取得します (タグ 0 を使用しないでください! 0 のインデックス付きタグを使用する場合は、10000 から 100039 までを使用します)、ボタン番号 40 はタグ 40 を取得します

- (void)configureViewForActivatedButtonNumber:(NSInteger)activeButtonNumber {
    UIImage *buttonImageOn = [UIImage imageNamed:@"fond-footer-motif-rollover.png"];
    UIImage *buttonImageOff = [UIImage imageNamed:@"fond-footer-motif.png"];
    for (NSInteger i = 1; i <= 40; i++) {
        UIButton *button = [self.scrollView viewWithTag:i];
        if (i != activeButtonNumber) {
            [button setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
        }
        else {
            [button setBackgroundImage:buttonImageOn forState:UIControlStateNormal];
        }       
    }
}

- (IBAction)buttonPressed:(UIButton *)sender {
    NSInteger buttonTag = sender.tag;
    [self configureViewForActivatedButtonNumber:buttonTag];
}
于 2012-11-02T07:59:56.593 に答える
0

アイテムを配列に入れます。次に、すべてのアイテムをループして背景画像を設定できます。

UIImage *buttonImageOn = [UIImage imageNamed:@"fond-footer-motif-rollover.png"];
UIImage *buttonImageOff = [UIImage imageNamed:@"fond-footer-motif.png"];

NSArray *buttons = @[sender, _button2, _button3, _button4, _button5, _button6, _button7];
for (UIButton *button in buttons) {
    [button setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
}
于 2012-11-02T08:01:12.970 に答える
0

ここに私のバージョンがあります:

for (id subview in self.view.subviews) {
    if ([subview isKindOfClass:[UIButton class]]) {
        [(UIButton *)subview setBackgroundImage:buttonImageOff forState:UIControlStateNormal];
    }
}

もちろん、ループ内をチェックする場合は、おそらく他のものが必要になるでしょう。ビュー上のすべてのボタンに何らかの番号のタグ ID を設定することができます。すべてのボタンを選択し、そこにタグを設定することで、Interface Builder で非常に簡単に行うことができます。

このバージョンは非常に高速で動作します

于 2012-11-02T08:22:11.307 に答える