0

ストーリーボードには 3 つのコントロール タイプがあります (bigButton0....bigButton11、btnSmall0...btnSmall11、lbl0...lbl11)。

btnBig0~btnBig11全てに同じ画像を割り当てたいです。よりスマートなソリューションが見つからなかったため、現在、長い冗長コードを使用していますが、実行時にこれを行う必要があります。

コードを短くする方法を教えてもらえますか? どうもありがとうございました。

NSString * sImageName = [NSString stringWithFormat:@"button_bg_%.0f_%.0f_normal.png", L_CELL_W, L_CELL_H];

[bigButton0 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton1 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton2 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton3 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton4 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton5 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton6 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton7 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton8 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton9 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton10 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];
[bigButton11 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateNormal];

sImageName = [NSString stringWithFormat:@"button_bg_%.0f_%.0f_down.png", L_CELL_W, L_CELL_H];

[bigButton0 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton1 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton2 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton3 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton4 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton5 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton6 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton7 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton8 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton9 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton10 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
[bigButton11 setImage:[UIImage imageNamed:sImageName] forState:UIControlStateHighlighted];
4

1 に答える 1

3

このコードを短縮する方法はいくつかあります。1 つは、 を使用することIBOutletCollectionです。ビュー コントローラーに のようなコレクション タイプのインスタンス変数を指定し、 ofNSArrayとして注釈を付けます。IBOutletCollectionUIButton

@implementation MyViewController {
    IBOutletCollection(UIButton) NSArray *bigButtons;
}
...

必要に応じて、パブリック インターフェイスまたは.mファイルのクラス拡張で、プロパティにすることができます。

#import "MyViewController.h"

// Class extension at the top of MyViewController.m
@interface MyViewController ()
@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *bigButtons;
@end

// Normal class @implementation comes after the class extension
@implementation MyViewController
...

これで、Interface Builder で、このアウトレット コレクションをすべての大きなボタンに接続できます。次に、コードでコレクションを反復処理できます。

NSString * sImageName = [NSString stringWithFormat:@"button_bg_%.0f_%.0f_normal.png", L_CELL_W, L_CELL_H];
UIImage *normalImage = [UIImage imageNamed:sImageName];
sImageName = [NSString stringWithFormat:@"button_bg_%.0f_%.0f_down.png", L_CELL_W, L_CELL_H];
UIImage *highlightedImage = [UIImage imageNamed:sImageName];

for (UIButton *button in bigButtons) {
    [button setImage:normalImage forState:UIControlStateNormal];
    [button setImage:highlightedImage forState:UIControlStateHighlighted];
}

ボタンのタイプごとに (個別のコレクション ivar を使用して) 繰り返します。

于 2012-11-24T07:31:22.300 に答える