XCode故事板:如何在故事板上没有触发器的情况下创建segue

5

我开始使用XCode 4.3.2中的故事板进行编程。我从主细节应用程序(iPad上的分割视图应用程序)开始。在详细视图中(名为DetailVC),我有一个视图,其中显示了一组自定义视图。

这些自定义视图(名为GridView)具有一个点击手势识别器,用于处理每个自定义视图上的点击事件。 点击GridView会推出一个视图控制器来显示一些搜索结果(名为SearchResultsVC)。

由于GridView创建在单独的nib文件中,并且DetailVCSearchResultsVC位于故事板中,那么如何创建一个目标为SearchResultsVC的push segue?我只是在DetailVCSearchResultsVC之间创建了一个segue。是否有什么方法可以在GridView类内部识别到点击手势后以编程方式触发此segue?

1个回答

7
在处理触摸事件的方法中,使用以下代码:
[self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];
在你的StoryBoard中,从DetailVC拖动到SearchResultVC并选择所需的segue类型。确保在属性检查器中将segue标识符命名为上述方法中的标识符。
我会尝试改进我的回答,我觉得我搞砸了:
1)在你的DetailVC.h中,创建一个GridView的实例变量,如下所示:
IBOutlet UIView * gridView;

还需要为您的网格视图创建一个获取方法和一个IBAction,代码如下:
-(UIView *)gridView;
-(IBAction)myGridGotPressed:(id)sender;

2) 现在在您的DetailVC.m中实现以下方法:

-(UIView *)gridView{
if(!gridView){
[[NSBundle mainBundle] loadNibNamed:@"GridView" owner:self options:nil];
}
return gridView;
}

同时按照以下方式实现您的IBAction

-(IBAction)myGridGotPressed:(id)sender{
[self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];
}

3) 要使这个工作起来,您需要将GridView的filesOwner类更改为DetailVC,然后像平常一样连接插座和操作。

希望这有所帮助。


1
网格视图将不得不将触摸传递回DetailVC。UIView子类无法执行segues。 - jrturton
我认为DetailVC应该有处理通过IBAction或自己的协议触摸的方法。 - Gaz Long
@jrturton - 我该如何将触摸事件传递回 DetailVC?使用委托 - 在这种情况下,我该如何获取对 DetailVC 的引用(视图不应知道视图控制器,对吧?) - vikmalhotra
@GazLong - 非常感谢。这正是我需要的“更改文件所有者”。只有一个问题 - 如何确切地完成?在界面构建器中吗? - vikmalhotra
只需在左侧(场景编辑器)中点击文件所有者,然后将类从NSObject更改为您的视图控制器类。 - Gaz Long

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接