我有自定义表格视图单元格,并已制作自定义类。如何从单元格中获取对表视图控制器的引用?
我有这个自定义tableview单元类。在这里,我有一个与点击事件相关的按钮。在点击时我得到的事件很好,但我希望得到一个表视图控制器,所以我可以在表视图的顶部显示操作表。
@interface MTPurchasedCartItemCell : UITableViewCell
- (IBAction)onShareTap:(id)sender;
@end
答案 0 :(得分:4)
我这样做的方法是使用块事件处理程序。在MTPurchasedCartItemCell
类中,在头文件中添加一个属性,如下所示:
@property (nonatomic, copy) void (^tapHandler)(id sender);
在实现文件中,您可以这样做:
- (IBAction)onShareTap:(id)sender {
if (self.tapHandler) {
tapHandler(sender);
}
}
最后在你的控制器类中,在cellForRowAtIndexPath:
:
...
cell.tapHandler = ^(id sender) {
// do something
}
...
答案 1 :(得分:2)
您也可以考虑将按钮的公开@property
添加到自定义单元格。
为此,请将以下行添加到自定义单元格类的头文件中:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
如果您在Interface Builder中创建按钮,那就是这样。如果您在代码中创建按钮,则需要添加以下行:
@property (nonatomic) UIButton *myButton;
然后,在从表视图控制器初始化或配置单元格时,您现在可以引用myButton
,并可以使用表视图控制器作为目标向其添加操作。
然后,在action方法中,您可以从按钮获取单元格。 Objective-C: How to generate one unique NSInteger from two NSIntegers?的答案解释了如何。
答案 2 :(得分:-1)
我做了一些非常相似的事情,它使用按钮事件从自定义单元格获取表格引用。
代码:
-(IBAction)onShareTap:(UIButton *)sender { // i've used a button as input..
UIButton *senderButton = (UIButton *)sender;
UITableViewCell *buttonCell = (UITableViewCell *)senderButton.superview.superview.superview;
UITableView* table = (UITableView *)[buttonCell superview];
NSLog(@"Table: %@", table);
}