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;
只有当你的button位于可能不是情况的UITableviewCell的时候才会起作用。
UITableViewCell *tableViewCell =(UITableViewCell*) [b superview];
正如你所说的那样,button是“在”单元格中的 – 就某个单元格而言,它是某个深度的子视图。 因此,直接走到视图层次结构,直到到达单元格:
- (void) buttonClicked:(id)sender { UIView* v = sender; while (![v isKindOfClass:[UITableViewCell class]]) v = v.superview; // now v is the cell }