1

我有UIButton一个习惯UITableViewCell。此按钮在单击时触发事件。

[myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

单击按钮时调用的方法是:

 - (void) buttonClicked:(id)sender
{

UIButton *b = (UIButton*)sender;

.....

} 

我的问题是,如何获取放置按钮的单元格的实例?

4

5 回答 5

2
 UITableViewCell *cell = (UITableViewCell*)[[b superview] superview];

如果您将单元格上的按钮添加为子视图,则按钮的超级视图将是 contentView,而 contentView 的超级视图将是 UITableViewCell

于 2012-11-22T09:20:58.747 回答
0
- (void) buttonClicked:(id)sender
{


  UIButton *b = (UIButton*)sender;    
  UITableViewCell *tableViewCell =(UITableViewCell*) [b superview];  

 //if you added the UIButton as a subview of UITableViewCell contendView, use this
  UITableViewCell *tableViewCell =(UITableViewCell*) [[b superview] superview]; 

} 
于 2012-11-22T09:16:25.473 回答
0

当您在表格视图单元格中添加按钮时,您可以将标签设置为按钮。如果您使用能够查看单元格的相同 indexPath 会更好。然后从 [sender tag] 你可以得到 indexPath 值。

于 2012-11-22T09:18:36.423 回答
0

我建议您不要只是将按钮放入 UITableViewCell。您最好将 UITableViewCell 子类化并制作 UITableViewButtonCell ,它将像这样调用委托回调:- (void) tableViewButtonCellDidButtonTap:(UITableViewCell*) buttonCell 这将是更可靠的解决方案。

只有当您的按钮直接插入可能不是案例的 UITableviewCell 中时,案例 才会起作用。UIButton *b = (UIButton*)sender;
UITableViewCell *tableViewCell =(UITableViewCell*) [b superview];

于 2012-11-22T09:39:20.453 回答
0

正如您正确地说的那样,按钮在单元格“中” - 从某种意义上说,它是某个单元格的某个深度的子视图。因此,只需沿着视图层次结构向上走,直到到达单元格:

- (void) buttonClicked:(id)sender {
    UIView* v = sender;
    while (![v isKindOfClass:[UITableViewCell class]])
        v = v.superview;
    // now v is the cell
}
于 2012-11-26T03:31:54.943 回答