如何从自定义 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 否。可以使用参数定义块,让调用者有机会将数据传递到块中。但你不需要这样做。该块可以访问定义它的局部变量。因此,在块内,您可以看到tableView
、indexPath
、cell
甚至self
(表格视图控制器)。看看the documentation。
感谢您的建议。我还不太习惯在 Objective-C 中使用块。我多次尝试使用它,但有时它仍然让我感到困惑。去看看文档。再次感谢!以上是关于如何从自定义 UITableViewCell 触发 segue - iOS7的主要内容,如果未能解决你的问题,请参考以下文章
如何从自定义 UITableViewCell 获取值到 ViewController?
如何从自定义 UITableViewCell 调用操作以重新加载 tableView
如何从自定义操作中进入删除确认状态 UITableViewCell?
如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图