2010-12-28 4 views

答えて

4

あなたはあなたのUIViewControllerはこのように、UIButtonからUIViewControllerに、ターゲット・アクションを作成することにより、イベントを受信持っている必要があります。その後、あなたのUIViewControllerのアクションメソッドでは、あなたが利用することができ

[button addTarget:self action:@selector(cellButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

正しいNSIndexPathを取得するUITableViewindexPathForCell:方法:

- (void) cellButtonClicked: (id) sender { 
    UIButton *btn = (UIButton *) sender; 
    UITableViewCell *cell = (UITableViewCell *) [[btn superview] superview]; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    //do something with indexPath... 
} 
+0

私はインデックスパスを正しく取得します.... tank u Jacob – Hari1251

+1

この方法は、iOS 7では今ではより多くのビューがUITableViewCellsに存在するため、意図したとおりには機能しません。私は定期的にこのコードを持つセルの代わりにUITableViewCellScrollViewを取得していました。 – Will

0

ウィルに同意し、あなたはトンを持っていますoOs7で反復する

for (UIView *parent = [btn superview]; parent != nil; parent = [parent superview]) { 
    if ([parent isKindOfClass: [UITableViewCell class]]) { 
     UITableViewCell *cell = (UITableViewCell *) parent; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell: cell]; 
     break; 
    } 
} 
1

これは、リンゴがビューの階層を変更したときに転倒しない代替方法です。基本的に、テーブルビューの座標系でボタンの原点を探します。あなたはpointが入っている行のNSIndexPathを見つけることができることを知っていたら。

- (void)buttonTapped:(UIButton *)button 
{ 
    CGPoint buttonOrigin = [button convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonOrigin]; 
} 
0

をあなたは簡単な解決策とそれを達成することができます。

ほとんどの場合、各セルは配列内のオブジェクトを表すため、カスタムセルクラス内で、(配列内の)セルIDまたはサーバーで定義されているセルIDを表すプロパティを定義する必要がありますDBとボタンがタップされたときにあなたはself.idを介して簡単に得ることができます - idは、セルのidプロパティを表します。