如何从自定义 UITableViewCell 触发 segue - iOS7

Posted

技术标签:

【中文标题】如何从自定义 UITableViewCell 触发 segue - iOS7【英文标题】:How to trigger segue from a custom UITableViewCell - iOS7 【发布时间】:2013-10-06 06:49:01 【问题描述】:

在这里,我在想从自定义 UITableViewCell 中触发 segue 时遇到问题。

问题是我已经实现了一个“编辑”UIButton,它将 UITableViewCell 的 NSIndexPath 传递给下一个 ViewController,以便从 Core Data 编辑一些实体。

因此,所有的方法和 IBActions 链接都在 UITableViewClass 内部实现,而不是像往常一样在 UITableViewClass 中实现。通常,我会从 ViewController.m 文件中触发[self performSegue: withIdentifier:],但这里由于 IBAction 方法是在 UITableViewCell.m 文件中实现的,因此无法访问其 ViewController;后来使[self performSegue: withIdentifier:] 成为不可能。

我认为这很常见,但我仍然想不出一个好主意来解决这个问题。您对此问题有什么策略吗?

【问题讨论】:

我建议将“编辑”按钮的操作链接到 ViewController.m ...或者是否存在导致您不这样做的问题? 这样做合适吗?因为我在自定义 UITableViewCell 中实现了所有其他 UIImageView、UILabels 和其他一些东西。 我不明白为什么不...但我认为这不是最佳做法...您可以参考这个问题以获得另一个解决方案:***.com/questions/10556148/…希望我有所帮助,如果您还有任何问题,请不要犹豫:) 谢谢@Mr_bem,你的回答当然很有帮助。我也在考虑使用委托。 当然!很高兴,祝你好运! ;D 【参考方案1】:

我通常对这样的小事情使用回调块,因为它比委托更简洁:

@interface MyCell : UITableViewCell
@property (strong, nonatomic) void(^tapHandler)();
- (IBAction)buttonTapped;
@end

#import "MyCell.h"
@implementation MyCell

- (void)buttonTapped

    if (self.tapHandler) 
        self.tapHandler();
    


@end

然后在配置单元格时设置点击处理程序:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    MyCell *cell = ...;
    [cell setTapHandler:^
        //tap handling logic
    ];

【讨论】:

谢谢蒂莫西,但我认为不可能通过 using 块传递 NSIndexPath? @Kann 否。可以使用参数定义块,让调用者有机会将数据传递到块中。但你不需要这样做。该块可以访问定义它的局部变量。因此,在块内,您可以看到tableViewindexPathcell 甚至self(表格视图控制器)。看看the documentation。 感谢您的建议。我还不太习惯在 Objective-C 中使用块。我多次尝试使用它,但有时它仍然让我感到困惑。去看看文档。再次感谢!

以上是关于如何从自定义 UITableViewCell 触发 segue - iOS7的主要内容,如果未能解决你的问题,请参考以下文章

如何从自定义 UITableViewCell 获取值到 ViewController?

如何从自定义 UITableViewCell 调用操作以重新加载 tableView

如何从自定义操作中进入删除确认状态 UITableViewCell?

如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图

编辑完成后如何从自定义uitableviewcell的文本字段向数组添加数据

如何使用情节提要从自定义 uitableviewcell 正确启动弹出框转场