2012-02-06 6 views
0

私はIBOutletCollection(UIbutton)

-(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とアウトレットのコレクションはよく分かりません。

+1

あなたの 'dealloc'メソッドが間違っています。自分自身でdeallocを呼び出すことは絶対にしないでください( 'super'に中継することを除く)。代わりに '[buttons releases]'を呼び出してください。 – SK9

答えて

1

NIBのコレクションに接続したボタンを使用して配列が設定されます。

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

...ボタンをコレクションに接続していないため、何もできません。

+0

この行を削除するだけでした。ありがとうございました。 –

+0

@Vlad cool - あなたはようこそ – justin

-1

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

このようにすることができます。

viewController.h

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

内部XIB myButtonという

に、ボタンのコンセントを接続し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"); 
} 
+0

これを多数のボタンに合わせる必要があります。私はヘッダーにそれらを宣言したくない。 –

-1

あなたはメソッドにボタンを接続するコンセントは必要ありません。

は、すべてのアウトレットとプロパティとinitButtonsコードを取り除くと、ちょうどこの持ちなさい:ファイルの所有者にあるボタンからInterface Builderのは、Ctrlキーを押しながらドラッグして次に

//in .h 

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

//in .m 

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

をプレイ選択:アクションを。

+0

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