8

で追加UIButtonしましたUITableViewCells。ユーザーがボタンをクリックすると、からの値を使用するためのインデックスパスが取得されますNSMutableArray。私は現在を取得するために以下を使用しましたIndexPath

[getMeButton addTarget:self action:@selector(resendTheErrorMessage:) forControlEvents:UIControlEventTouchUpInside];

-(void) resendTheErrorMessage:(id)sender 
{
   NSLog(@"SEnder: %@", sender);
   //NSLog(@"Index Path : %@", indexpath);
}

誰かが現在のインデックスパス@selectorを渡すのを手伝ってくれませんかUIButton's。前もって感謝します。

編集:

これは私が得た出力ですNSLog()

<UIButton: 0x864d420; frame = (225 31; 95 16); opaque = NO; tag = 105; layer = <CALayer: 0x864d570>>
4

5 に答える 5

30

UIButtonこのようにあなたを追加

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setFrame:CGRectMake(10.0, 2.0, 140.0, 40.0)];
[btn setTitle:@"ButtonTitle" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[btn setTag:indexPath.row];
[cell.contentView addSubview:btn];

そして、そのタグ番号を取得します-

-(void)buttonClicked:(id)sender
{
    NSLog(@"tag number is = %d",[sender tag]);
    //In this case the tag number of button will be same as your cellIndex.
   // You can make your cell from this.

   NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0];
   UITableViewCell *cell = [tblView cellForRowAtIndexPath:indexPath];
}

注: 上記のソリューションは、tableViewにセクションが1つしかない場合に機能します。tableViewに複数のセクションがある場合は、セクションインデックスを知っているか、以下のメソッドに進む必要があります。

代替案:1

UIView *contentView = (UIView *)[sender superview];
UITableViewCell *cell = (UITableViewCell *)[contentView superview];
NSIndexPath *indexPath = [tblView indexPathForCell:cell];

代替案:2

CGPoint touchPoint = [sender convertPoint:CGPointZero toView:tblView];
NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:touchPoint];
UITableViewCell *cell = [tblView cellForRowAtIndexPath:indexPath];
于 2012-08-13T14:23:21.090 に答える
6

ボタンがセルビューのサブビューであり、テーブルビューがセルビューのインデックスパスを認識している場合、次のように機能します。

- (UITableViewCell *)containingCellForView:(UIView *)view
{
    if (!view.superview)
        return nil;

    if ([view.superview isKindOfClass:[UITableViewCell class]]) 
        return (UITableViewCell *)view.superview;

    return [self containingCellForView:view.superview];
}

- (IBAction)buttonClicked:(id)sender
{
    UITableViewCell *containingCell = [self containingCellForView:sender];
    if (containingCell) {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:containingCell];
        NSLog(@"Section: %i Row: %i", indexPath.section, indexPath.row);
    }
}
于 2012-08-13T14:35:19.610 に答える
2

テーブルの行のみが必要な場合は、ボタンのタグプロパティを行番号に設定できます。パス全体(セクション番号付き)が必要な場合は、UIButtonをサブクラス化し、ボタンをテーブル行に追加するときに設定する新しいプロパティ( "indexPath"が適切な名前)を作成する必要があります。

于 2012-08-13T14:23:02.563 に答える
2

複数のセクションがあるテーブルビューの場合、より簡単な解決策はタグを割り当てることです。

cell.button.tag = indexPath.section * 1000 + indexPath.row

イベントハンドラで使用する:

let section = sender.tag / 1000
let row = sender.tag % 1000

セクションのいずれかに1000以上の行を含めることができる場合は、1000より大きい数で乗算する必要があることに注意してください。

于 2016-06-10T11:10:27.197 に答える
0

私にとっては、cellForRowAtIndexPathのボタンにタグを追加すると機能します。

cell.button.tag = indexPath.row;

セルクラスでタグを取得します...例:

 NSLog(@"tag number is = %d",[sender tag]);

あなたがcell.rowを知ることができるという聖霊降臨祭。これは私にとってはうまくいきます、私の英語でごめんなさい。

于 2014-07-07T22:21:20.783 に答える