Ios 如何以编程方式调用视图控制器?
我已经看过了所有关于这本书的教程,但仍然没有答案。我需要调用代码中的另一个视图。我正在使用Ios 如何以编程方式调用视图控制器?,ios,objective-c,uiviewcontroller,uistoryboard,presentviewcontroller,Ios,Objective C,Uiviewcontroller,Uistoryboard,Presentviewcontroller,我已经看过了所有关于这本书的教程,但仍然没有答案。我需要调用代码中的另一个视图。我正在使用UIStoryboards。我已经通过从ui按钮拖动控件多次更改了视图,但现在它必须来自代码。如果用户是第一次打开应用程序,我尝试从主菜单调用信息页面。然而,我似乎找不到从代码中更改视图的方法。所有我的视图都由相同的文件控制(ViewController2)。我的主菜单的标识符是ViewControllerMain,信息页面的标识符是ViewControllerInfo。首先,我尝试了这个: [ViewCo
UIStoryboards
。我已经通过从ui按钮拖动控件多次更改了视图,但现在它必须来自代码。如果用户是第一次打开应用程序,我尝试从主菜单调用信息页面。然而,我似乎找不到从代码中更改视图的方法。所有我的视图都由相同的文件控制(ViewController2)。我的主菜单的标识符
是ViewControllerMain,信息页面的标识符
是ViewControllerInfo。首先,我尝试了这个:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
然后我试着为每个人制作不同的UIViewControllers
,并说:
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
两者都不起作用。对于第一个,它说:
使用未声明的标识符ViewControllerMain
在第二条中,它说:
意外的接口名称“ViewController”:应为标识符
我能做什么?要创建视图控制器:
UIViewController * vc = [[UIViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
要调用视图控制器(必须从另一个视图控制器中调用):
首先,使用nil而不是null
从情节提要加载视图控制器:
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];
视图控制器的标识符
等于视图控制器的类名,或者等于可以在情节提要的标识检查器中指定的情节提要ID。您需要从情节提要实例化视图控制器,然后显示:
ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];
本例假设您有一个导航控制器,以便返回到上一个视图。当然,您也可以使用presentViewController:animated:completion:。要点是让故事板使用目标视图控制器的ID实例化目标视图控制器。有两种方法可以做到这一点: 1、在故事板中创建一个到ViewController的序列,如我在此处的回答所述:
2、给出您的ViewController和标识符,并使用我在这里的回答中的代码调用它:如果您想使用NavigationController,可以通过这种方式调用ViewController 1.在当前屏幕中:加载新屏幕
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
加载视图中的2.1:在.h文件中添加以下内容
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
@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
希望这对那里的人有用:)导入要显示的视图控制器类并使用以下代码
KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];
敏捷的
这将从情节提要中获取视图控制器并显示它
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)
根据需要更改情节提要名称、视图控制器名称和视图控制器id。这背后的主要逻辑是
NSString * storyboardIdentifier = @"SecondStoryBoard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];
UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];
[self presentViewController:UIVC animated:YES completion:nil];
如何创建控制器?我在MainStoryboard.storyboard文件hi@190290000卢布人中创建了它们。这是可行的,但我想从情节提要文件中显示一个已经创建的视图。这只是给了我一个空白视图。有办法做到这一点吗?我正在尽力。我肯定有很多东西要学。@Johnfarkson:没问题!比如说,如果行代码UIViewController*vc=[storyboard InstanceeviewController的标识符:@“您的VIEWCONTROLLER的标识符”];执行多次,然后每次创建新的*vc对象?那么早期的*vc对象呢?这是内存泄漏吗?@AvijitNagare-Nah-man,多亏了ARC(假设您正在使用它),引用将自动释放,所以您不必担心它。如果你说要创建多个同名变量,这将导致编译器错误,因此它甚至不允许你这样做。好的。表示UIViewController*vc=[storyboard InstanceDeviceController WithiIdentifier:@“您的_视图控制器“];每次都创建新变量。但是ARC管理它的记忆。这个问题已经有3年了,有一个公认的答案,如果你有一个有价值的贡献,请解释它,而不仅仅是发布代码。如果我在storeyboard中没有任何视图控制器,但我正在创建一个编程类,那么我如何以编程方式创建一个视图控制器,并为其分配一个类和演示it@iOSDeveloper,我不知道。如果我在storeyboard中没有任何视图控制器,但我正在创建一个可编程类,我如何可以通过编程创建一个视图控制器,并为其分配一个类,然后演示它呢?如果我在storeyboard中没有任何视图控制器,但我正在创建一个可编程类,我如何创建视图控制器上面的代码不需要任何故事板,它将与xibs一起工作。如果我既没有故事板,也没有xibs,那怎么办
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];