执行由 UITableViewCell 调用的 Segue

Posted

技术标签:

【中文标题】执行由 UITableViewCell 调用的 Segue【英文标题】:Perform a Segue Called by a UITableViewCell 【发布时间】:2012-10-06 20:22:50 【问题描述】:

我在自定义表格视图单元格中有一些 UIButtons,当按下时我希望它们在单元格所在的表格视图所在的视图控制器中调用 segues。我现在正在做的是声明这样的动作: - (无效)行动;

在表格视图所在的类中。然后我从单元格中调用该操作,如下所示:

ViewController *viewController = [[ViewController alloc] init];
[viewController action];

但是,当调用该操作时,它表示视图控制器没有这样的 segue,我知道这是不正确的。从视图控制器本身调用“动作”可以完美地工作,而不是从单元格中调用。

另外,这里是执行segue的代码:

-(void)action 
     [self performSegueWithIdentifier:@"action" sender:self];

我怎样才能做到这一点?

欢迎提出任何建议。

更新

我只是尝试像这样在单元格上设置一个委托:

Cell 的头文件: @class PostCellView;

@protocol PostCellViewDelegate
-(void)action;
@end

@interface PostCellView : UITableViewCell <UIAlertViewDelegate, UIGestureRecognizerDelegate>

@property (weak, nonatomic) id <PostCellViewDelegate> delegate;

在单元格的主文件中,我调用如下操作: [self.delegate action];

在承载表格视图的视图的标题中,我像这样导入单元格: #import "PostCellView.h"

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, PostCellViewDelegate>

然后在该视图的主文件中,我有单元格操作:

-(void)action 

    [self performSegueWithIdentifier:@"action" sender:self];


但该操作从未执行,我检查过。当我从单元格调用操作时我记录了,我在操作本身上放置了一个 NSLog,从单元格调用它的日志有效但不是操作。

【问题讨论】:

你能显示你执行segue的代码吗? 分配和初始化视图控制器只是一个例子吗?我不明白你为什么要这样做,因为当点击单元格的按钮时 TableViewController 已经存在。 不,不是,但当另一个用户指出我应该将单元格添加为委托时,我意识到了。 【参考方案1】:

我认为你的问题在于这个ViewController *viewController = [[ViewController alloc] init]; [viewController action]; 您正在启动一个新的 ViewController 并没有获取当前单元格所在的 ViewController。

也许您可以在单元格上设置一个委托,以便单元格具有对 viewController 的引用

【讨论】:

我只是尝试将单元格添加为委托,但我无法让它工作,我添加了我的代码和我在原始问题中遇到的问题。 在 cellForRowAtIndexPath 中你设置了 cell.delegate=self 吗?【参考方案2】:

创建按钮并以编程方式调用其处理程序的简单方法是

UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(100, 100, 80, 40)];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button]; //self.view is the view on which you want to add button

它的处理程序应该在你的实现文件中这样定义:

-(void)buttonClick:(id)sender
    NSLog(@"button clicked");
    // your code on click of button 

您可以查看ios documentation。

希望这将帮助您找出问题所在。 :)

【讨论】:

这根本不是我要问的...我需要在自定义 UITableViewCell 中有一个按钮,我已经在单元格中设置了一个 IBAction,调用一个动作来执行一个 segue在 UITableView 所在的视图控制器中。 你看过这个developer.apple.com/library/ios/#featuredarticles/…可能对你有帮助。 我不需要创建自定义转场,我只需要从自定义 UITableViewCell 调用设置到视图控制器的转场。

以上是关于执行由 UITableViewCell 调用的 Segue的主要内容,如果未能解决你的问题,请参考以下文章

绘图 + UITableViewCell + UIScrollView 子类?

自定义 UITableViewCell 的 viewDidLayoutSubviews

如何在 UITableViewCell 中使用预定义视图(笔尖)?

在 iOS 中访问自定义 UITableViewCell 中的视图

使用延迟在 UITableViewCell 上延迟图像下载

UITableViewCell的-layoutSubviews的实现需要调用super