我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。

我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。

我想知道如何通过编程来实现。

我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。


当前回答

下面是编程方式创建segue的代码示例:

class ViewController: UIViewController {
    ...
    // 1. Define the Segue
    private var commonSegue: UIStoryboardSegue!
    ...
    override func viewDidLoad() {
        ...
        // 2. Initialize the Segue
        self.commonSegue = UIStoryboardSegue(identifier: "CommonSegue", source: ..., destination: ...) {
            self.commonSegue.source.showDetailViewController(self.commonSegue.destination, sender: self)
        }
        ...
    }
    ...
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 4. Prepare to perform the Segue
        if self.commonSegue == segue {
            ...
        }
        ...
    }
    ...
    func actionFunction() {
        // 3. Perform the Segue
        self.prepare(for: self.commonSegue, sender: self)
        self.commonSegue.perform()
    }
    ...
}

其他回答

首先,假设你在故事板中有两个不同的视图,你想从一个屏幕导航到另一个屏幕,那么按照以下步骤:

1).在身份检查器中使用类文件和故事板id定义所有视图。

2).确保你添加了一个导航控制器到第一个视图。在故事板中选择它,然后编辑器>嵌入>导航控制器

3).在你的第一个类中,导入"secondClass.h"

#import "ViewController.h
#import "secondController.h"

4).在必须执行segue的IBAction中添加此命令

secondController *next=[self.storyboard instantiateViewControllerWithIdentifier:@"second"];
[self.navigationController pushViewController:next animated:YES];

5). @"second"是secondview控制器类,故事板id。

你可以创建UIStoryBoardSegue的子类。子类化主要用于提供自定义过渡动画。

你可以看到wwdc 2011介绍StoryBoard的视频。YouTube上也有。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue

我猜这个问题已经得到了回答和接受,但我只是想再补充一些细节。

我解决了一个问题,我将登录视图作为第一个屏幕,然后想要segue到应用程序,如果登录是正确的。我创建了从登录视图控制器到根视图控制器的segue并给它一个像myidentifier这样的标识符。

然后检查所有登录代码后,如果登录是正确的,我会打电话

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

我最大的误解是,我试图把segue放到一个按钮上,一旦找到segue就会中断。

你必须将你的代码链接到你正在使用的UIStoryboard。确保你进入UIStoryboard中的YourViewController,点击它周围的边框,然后设置它的标识符字段为你在代码中调用的NSString。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                                                     bundle:nil];
YourViewController *yourViewController = 
 (YourViewController *)
  [storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];

对于故事板中的控制器。

Jhilgert00是你要找的东西吗?

-(IBAction)nav_goHome:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
[self.navigationController pushViewController: myController animated:YES];

}

还是……

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