我已经看过了所有的教程我能找到的就这一个,我还没有答案。 我需要调用从代码另一种观点。 我使用UIStoryboards
。 我已经控制拖动从改变视图多次UIButtons
,但现在它必须从代码。 我试图从主菜单中调用信息页面,如果它是第一次用户打开应用程序。 我似乎无法找到一种方法来改变从代码的意见,但是。 我所有的观点得到相同的文件(ViewController2)控制。 该identifier
我的主菜单是ViewControllerMain和identifier
的信息页面的是ViewControllerInfo。 首先,我想这:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
然后我试图使不同UIViewControllers
每个并说:
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
但是都没有成功。 对于第一个,它说:
使用未声明的标识符ViewControllerMain的。
在第二个,它说:
意想不到的接口名称“视图控制器”:期望标识符。
我能做什么?
Answer 1:
要创建视图控制器:
UIViewController * vc = [[UIViewController alloc] init];
调用的图控制器(必须从另一个视图控制器中调用):
[self presentViewController:vc animated:YES completion:nil];
其一,用零而不是零。
从加载故事板的视图控制器:
NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];
Identifier
您的视图控制器或者是等于你的视图控制器,或者,你可以在你的故事板的身份检查分配一个Storyboard ID的类名。
Answer 2:
您需要实例从故事板视图控制器,然后显示它:
ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];
这个例子假设你为了返回到先前的观点有一个导航控制器。 当然,你可以也使用presentViewController:动画:完成:. 最主要的一点是让你的故事板使用目标视图控制器的ID实例化目标视图控制器。
Answer 3:
迅速
这从故事板得到一个视图控制器,并提出它。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)
更改故事板名称,查看控制器的名称,并查看控制器ID为合适。
Answer 4:
您可以拨打视图控制器这种方式,如果你想与NavigationController
1.In当前屏幕:加载新的屏幕
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
2.1在加载视图:在.h文件中添加以下
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
2.2在加载视图:在.m文件添加以下
@implementation VerifyExpViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.delegate = self;
[self setNavigationBar];
}
-(void)setNavigationBar
{
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.translucent = YES;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}
-(void)onBackButtonTap:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
//todo for save button
}
@end
希望这将是每个人都会有有用:)
Answer 5:
有2种方式,你可以这样做:
1,创建一个原因请看在你的故事板您的ViewController如在这里我的答案解释: 如何执行是不相关的用户输入的iOS 5 SEGUE?
2,给你的ViewController和标识,并在我的答案使用代码在这里称之为: 编程调用故事板的场景(无需SEGUE)?
Answer 6:
此,确保对方落后的主要逻辑,
NSString * storyboardIdentifier = @"SecondStoryBoard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];
UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];
[self presentViewController:UIVC animated:YES completion:nil];
Answer 7:
导入要显示视图控制器类,并使用下面的代码
KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];
Answer 8:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
// [self presentViewController:controller animated:YES completion:nil];
UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController)
{
topRootViewController = topRootViewController.presentedViewController;
}
[topRootViewController presentViewController:controller animated:YES completion:nil];
文章来源: How to call a View Controller programmatically?