IBOutletCollection(UIbutton)

私の.hで私は持っている

IBOutlet NSMutableArray *buttons;
@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *buttons;
-(void)play:(UIButton *)theButton;

私の中に私は持っている

-(void)initButtons{
buttons = [[NSMutableArray alloc] initWithCapacity:1];
UIButton *myBut = [UIButton alloc];
[buttons addObject: myBut];
[[buttons objectAtIndex:0] addtarget:self [email protected](play:) forControlEventTouchUpInside];
}

...

-(void)dealloc{
[buttons dealloc];
[super deallloc];
}

.....

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

インターフェイスビルダーのボタンIBoutletCollectionを単純なボタンにドラッグしましたが、テストするときに期待されるアクションは実行されません。

私は、(void)の代わりに(IBAction)に私の行動を変え、ボタンにリンクすると言います。

私はNSArraysとアウトレットのコレクションをよく理解していません。

0
あなたの dealloc メソッドが間違っています。 deallocを自分で呼び出すことは絶対に避けてください( super への中継は除きます)。代わりに [buttons release] を呼び出します。
追加された 著者 SK9,

3 答え

あなたのUIButton myButを.h fileのプロパティを持つIBOutletとして宣言します。xibのボタンコンセントをmyButに接続します.NOMutableArrayをIBOutletCollectionまたはIBOutletとして宣言する必要はありません。単に宣言し、initButtonsメソッド内でmyButを再度割り当てる必要はありません。

あなたはこのようにすることができます。

viewController.h

@property (strong, nonatomic) IBOutlet UIButton *myButton;
@property (nonatomic,strong) NSMutableArray *buttons;
-(void)initButtons;
-(void)play:(id)sender;

ボタンをmyButtonに接続するinSide xib

viewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initButtons];
   //Do any additional setup after loading the view, typically from a nib.
}


-(void)initButtons{
    buttons = [[NSMutableArray alloc] initWithCapacity:1];
    [buttons addObject: myButton];
    [[buttons objectAtIndex:0] addTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside];
}

-(void)play:(id)sender
{
    NSLog(@"button tapped");
}
1
追加された
私はこれを多数のボタンにスケールする必要があります。私はヘッダーにそれらを宣言したくない。
追加された 著者 Vlad Otrocol,

配列は、あなたがNIB内のコレクションに接続したボタンで設定されます。あなたがここでivarをリセットしたので何もしません:

buttons = [[NSMutableArray alloc] initWithCapacity:1];

...またはあなたがコレクションにボタンを接続していないためです。

1
追加された
私はこの行を削除するだけでした。ありがとうございました。
追加された 著者 Vlad Otrocol,
@ Vlad cool - あなたは大歓迎です
追加された 著者 justin,

ボタンをメソッドに接続するためのアウトレットは必要ありません。

すべてのアウトレットとプロパティとinitButtonsコードを取り除き、次のようにしてください:

//in .h

-(IBAction)play:(UIButton *)theButton;

//in .m

-(IBAction)play:(UIButton *)theButton
{
    //the code for your play action
}

次に、Interface Builderで、Ctrlキーを押しながらボタンからFile's Ownerにドラッグし、play:アクションを選択します。

1
追加された
私は100のボタンを持っています。私は本当にそれぞれのアクションをコピーして貼り付けることはできません。スケーラブルなボタン配列と単一の関数が必要です。それから、各ボタンが作成されると、アクションが再生され、何とかそのタグを送信する必要があります。ボタンが押されると、ボタンタグを受け取り、適切な音を鳴らします
追加された 著者 Vlad Otrocol,