0

次のコードを使用してボタンを tableviewcell に追加しました。ボタンが押されたときに、それがどの行であったかを知る必要があります。だから私はボタンにタグを付けました(playButton viewWithTag:indexPath.row)ボタンが押された、またはなぜこのようにクラッシュするのか ありがとう

-(void)configureCell: (UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom] ;
[playButton setFrame:CGRectMake(150,5,40,40)];
[playButton viewWithTag:indexPath.row] ; //Tagging the button
[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(play) forControlEvents: UIControlEventTouchUpInside];
[cell addSubview:playButton];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *beatCell = nil;
beatCell = [tableView dequeueReusableCellWithIdentifier:@"beatCell"];
if (beatCell == nil){
    beatCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"beatCell"];
}
 [self configureCell:beatCell atIndexPath:indexPath];
return beatCell;

}

-(void) play:(id) sender{
UIButton *play = sender;
NSLog(@"Play %i" , play.tag);

}

4

2 に答える 2

1

この行の1文字を変更します。

[playButton addTarget:self action:@selector(play) forControlEvents: UIControlEventTouchUpInside];

[playButton addTarget:self action:@selector(play:) forControlEvents: UIControlEventTouchUpInside];

セレクターにパラメーターを含める場合、Objective Cランタイムがターゲットとするオブジェクトでそのセレクターを検索できるようにするために、コロンは実際に重要です。

于 2012-07-01T19:52:31.853 に答える
1

それ以外の

[playButton viewWithTag:indexPath.row] ; 

UIButton のサブビューを受信しようとする場合 (理由はわかりません)、setter メソッドを使用してタグを設定する必要があります。

[playButton setTag:indexPath.row];

また、送信者を UIButton タイプにキャストする必要があります

-(void) play:(id) sender{
UIButton *play = (UIButton *)sender;
NSLog(@"Play %i" , play.tag);
}
于 2012-07-01T19:55:57.330 に答える