【问题标题】: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 作为目标参数传递来设置它:
  • 好的,我想如果有办法通过单元格访问表格视图控制器,那么我可以从表格单元格调用该操作
  • 从按钮框架中显示操作表会容易得多。

标签: ios uitableview


【解决方案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 正在询问如何获取表视图控制器,而不是表视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多