如何从自定义表格视图单元类中获取对表格视图控制器的引用
Posted
技术标签:
【中文标题】如何从自定义表格视图单元类中获取对表格视图控制器的引用【英文标题】:How to get a reference to Table View Controller from Custom Table View Cell class 【发布时间】:2013-08-28 22:05:32 【问题描述】:我有自定义表格视图单元格并创建了一个自定义类。如何从单元格中获取对表格视图控制器的引用?
我有这个自定义的 tableview 单元格类。在这个我有一个与点击事件连接的按钮。在点击时,我可以很好地处理事件,但我希望保留表格视图控制器,以便我可以在表格视图顶部显示操作表。
@interface MTPurchasedCartItemCell : UITableViewCell
- (IBAction)onShareTap:(id)sender;
@end
【问题讨论】:
您将不得不提供更多数据,甚至是代码。你想做什么?你做了什么?你说的指针是什么意思?你需要指针做什么? 我添加了一些代码并更新了我的问题。谢谢。基本上我想访问表视图控制器,这样我就可以显示操作表,因为我在表视图单元格中有一个按钮。 按钮的目标应该设置为控制器,您可以通过在 addTarget:action:forControlEvents: 中将 self 作为目标参数传递来设置它: 好的,我想如果有办法通过单元格访问表格视图控制器,那么我可以从表格单元格调用该操作 从按钮框架中显示操作表会容易得多。 【参考方案1】:我这样做的方法是使用块事件处理程序。在您的 MTPurchasedCartItemCell
类中,在头文件中添加一个属性,如下所示:
@property (nonatomic, copy) void (^tapHandler)(id sender);
在实现文件中你可以这样做:
- (IBAction)onShareTap:(id)sender
if (self.tapHandler)
tapHandler(sender);
最后在您的控制器类中,在您的 cellForRowAtIndexPath:
中执行类似的操作:
...
cell.tapHandler = ^(id sender)
// do something
...
【讨论】:
佛陀告诫悉达多,小心不要太聪明。 Using target-action 是做同样事情的更简单的方法。【参考方案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? 的答案解释了如何。
【讨论】:
【参考方案3】:我做了一些非常相似的事情,使用按钮事件从自定义单元格获取表引用。
代码:
-(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);
【讨论】:
使用superview
从其中一个单元格中获取对表格视图的引用是很危险的,因为视图层次结构的详细信息是私有的,并且可能在不同版本的 ios 中发生变化,这会破坏你的代码。此外,@EncorePTL 正在询问如何获取表视图控制器,而不是表视图。以上是关于如何从自定义表格视图单元类中获取对表格视图控制器的引用的主要内容,如果未能解决你的问题,请参考以下文章