iOS获取特定的UITableViewCell

我有一个自定义的UITableViewCell UIButton 。 点击时该button触发一个事件。

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

点击button时调用的方法是:

  - (void) buttonClicked:(id)sender { UIButton *b = (UIButton*)sender; ..... } 

我的问题是,我怎样才能得到放置button的单元格的实例?

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

如果你添加单元格的button作为子视图,那么button的超级视图将contentView和超视图的contentView将UITableViewCell

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

 - (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]; } 

我build议你不只是把一个button放到UITableViewCell中。 你应该更好的是子类UITableViewCell,并使UITableViewButtonCell,将调用委托callback像这样: - (void) tableViewButtonCellDidButtonTap:(UITableViewCell*) buttonCell这将是更多的SOLID解决scheme。

UIButton *b = (UIButton*)sender;
UITableViewCell *tableViewCell =(UITableViewCell*) [b superview];
UIButton *b = (UIButton*)sender;
UITableViewCell *tableViewCell =(UITableViewCell*) [b superview];
只有当你的button位于可能不是情况的UITableviewCell的时候才会起作用。

正如你所说的那样,button是“在”单元格中的 – 就某个单元格而言,它是某个深度的子视图。 因此,直接走到视图层次结构,直到到达单元格:

 - (void) buttonClicked:(id)sender { UIView* v = sender; while (![v isKindOfClass:[UITableViewCell class]]) v = v.superview; // now v is the cell }