如何从Custom Table View Cell类获取对Table View Controller的引用

时间:2013-08-28 22:05:32

标签: ios uitableview

我有自定义表格视图单元格,并已制作自定义类。如何从单元格中获取对表视图控制器的引用?

我有这个自定义tableview单元类。在这里,我有一个与点击事件相关的按钮。在点击时我得到的事件很好,但我希望得到一个表视图控制器,所以我可以在表视图的顶部显示操作表。

@interface MTPurchasedCartItemCell : UITableViewCell

- (IBAction)onShareTap:(id)sender;

@end

3 个答案:

答案 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);
}