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

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

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

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


当前回答

故事板segue不能在故事板之外创建。尽管有一些缺点,但您需要将其连接起来。

UIStoryboardSegue Reference明确指出:

你不能直接创建segue对象。相反,是故事板 运行时必须在两个视图之间执行segue时创建它们 控制器。类型仍然可以以编程方式启动segue performSegueWithIdentifier:sender: UIViewController的方法 想要的东西。您可以这样做,以从添加的源启动一个segue 因此在接口生成器中不可用。

你仍然可以通过编程的方式告诉故事板使用presentModalViewController:或pushViewController:animated:调用的segue来呈现一个视图控制器,但是你需要一个故事板实例。

你可以调用UIStoryboards类方法来获得一个命名的故事板,它带有主bundle的nil。

情节提要名称:捆绑包:

其他回答

我对UIStoryboard的segue进行了逆向工程,并做了一个开源(重新)实现:https://github.com/acoomans/Segway

有了这个库,就可以编程地定义segue(不需要任何故事板)。

希望能有所帮助。

故事板segue不能在故事板之外创建。尽管有一些缺点,但您需要将其连接起来。

UIStoryboardSegue Reference明确指出:

你不能直接创建segue对象。相反,是故事板 运行时必须在两个视图之间执行segue时创建它们 控制器。类型仍然可以以编程方式启动segue performSegueWithIdentifier:sender: UIViewController的方法 想要的东西。您可以这样做,以从添加的源启动一个segue 因此在接口生成器中不可用。

你仍然可以通过编程的方式告诉故事板使用presentModalViewController:或pushViewController:animated:调用的segue来呈现一个视图控制器,但是你需要一个故事板实例。

你可以调用UIStoryboards类方法来获得一个命名的故事板,它带有主bundle的nil。

情节提要名称:捆绑包:

我一直在使用这段代码来实例化我的自定义segue子类并以编程方式运行它。这似乎很有效。这有什么问题吗?我很困惑,看到所有其他的答案都说这是不可能的。

UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];

对于故事板中的控制器。

Jhilgert00是你要找的东西吗?

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

}

还是……

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

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

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。