我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
当前回答
首先,假设你在故事板中有两个不同的视图,你想从一个屏幕导航到另一个屏幕,那么按照以下步骤:
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。
其他回答
首先,假设你在故事板中有两个不同的视图,你想从一个屏幕导航到另一个屏幕,那么按照以下步骤:
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。
根据定义,segue不能独立于故事板而存在。它甚至存在于类名中:UIStoryboardSegue。你不能通过编程方式创建segue——是故事板运行时为你创建它们。你通常可以在你的视图控制器代码中调用performSegueWithIdentifier:,但这依赖于在故事板中已经设置了一个segue来引用。
我认为你问的是如何在你的公共视图控制器(基类)中创建一个方法,它将转换到一个新的视图控制器,并将被所有派生类继承。你可以为你的基类视图控制器创建一个这样的方法:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
然后在你的派生类中,当适当的按钮被点击或表行被选中时调用那个方法。
我想澄清一下……
一个常见的误解,事实上我有一段时间了,故事板segue是由prepareForSegue:sender:方法触发的。事实并非如此。不管你是否为那个(离开)视图控制器实现了prepareForSegue:sender:方法,storyboard segue都会执行。
这是我从Paul Hegarty在iTunesU的精彩讲座中学到的。很抱歉,我不记得是哪节课了。
如果你在故事板中的两个视图控制器之间连接了一个segue,但是没有实现prepareForSegue:sender:方法,这个segue仍然会segue到目标视图控制器。但它会毫无准备地segue到那个视图控制器。
希望这能有所帮助。
我一直在使用这段代码来实例化我的自定义segue子类并以编程方式运行它。这似乎很有效。这有什么问题吗?我很困惑,看到所有其他的答案都说这是不可能的。
UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];
我猜这个问题已经得到了回答和接受,但我只是想再补充一些细节。
我解决了一个问题,我将登录视图作为第一个屏幕,然后想要segue到应用程序,如果登录是正确的。我创建了从登录视图控制器到根视图控制器的segue并给它一个像myidentifier这样的标识符。
然后检查所有登录代码后,如果登录是正确的,我会打电话
[self performSegueWithIdentifier: @"myidentifier" sender: self];
我最大的误解是,我试图把segue放到一个按钮上,一旦找到segue就会中断。