我正在使用presentViewController:animated:completion:
方法转到另一个视图控制器。
这是我的代码:
AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];
此代码转到另一个UIViewController
,但另一个控制器为空。我一直在使用故事板,但现在我需要在代码中完成。
答案 0 :(得分:47)
如果您使用的是故事板,则可能不应该使用alloc
和init
来创建新的视图控制器。相反,请查看您的故事板并找到您要执行的 segue ;它应该有一个唯一的标识符(如果没有,你可以在右侧边栏中设置一个)。
找到该segue的标识符后,向当前视图控制器发送-performSegueWithIdentifier:sender
消息:
[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];
这将导致故事板实例化AddTaskViewController,并以您为该segue定义的方式呈现它。
另一方面,如果您根本没有使用故事板,那么您需要为AddTaskViewController提供某种用户界面。最常见的方法是使用nib初始化控制器:而不是仅调用init
,您将调用-initWithNibName:bundle:
并提供包含add-task的.xib文件的名称UI:
AddTaskViewController *add = [[AddTaskViewController alloc]
initWithNibName:@"AddTaskView" bundle:nil];
[self presentViewController:add animated:YES completion:nil];
(还有其他(不常见的)获取与新视图控制器关联的视图的方法,但这可能会给您带来最少的工作麻烦。)
答案 1 :(得分:31)
如果你正在使用Storyboard并且你的“添加”viewController在storyboard中,那么在设置中为你的“add”viewcontroller设置一个标识符,这样你就可以这样做:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"NameOfYourStoryBoard"
bundle:nil];
AddTaskViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];
[self presentViewController:add
animated:YES
completion:nil];
如果你没有在storyboard或nib文件中添加“add”viewController,并希望以programmaticaly方式创建整个事物,那么appDocs会说:
如果无法在故事板或nib文件中定义视图,请覆盖loadView方法以手动实例化视图层次结构并将其分配给视图属性。
答案 2 :(得分:2)
您需要从故事板身份检查器设置故事板ID
AddTaskViewController *add=[self.storyboard instantiateViewControllerWithIdentifier:@"storyboard_id"];
[self presentViewController:add animated:YES completion:nil];
答案 3 :(得分:1)
您的代码:
AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];
这段代码可以转到另一个控制器,但你得到一个新的viewController,而不是你的故事板的控制器,你可以这样做:
AddTaskViewController *add = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
[self presentViewController:add animated:YES completion:nil];
答案 4 :(得分:1)
最好的方法是
AddTaskViewController * add = [self.storyboard instantiateViewControllerWithIdentifier:@"addID"];
[self presentViewController:add animated:YES completion:nil];
答案 5 :(得分:0)
以下是如何在Swift中执行此操作:
let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)
答案 6 :(得分:0)
尝试以下方法:
NextViewController *nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:NULL];
答案 7 :(得分:0)
试试这段代码:
[self.navigationController presentViewController:controller animated:YES completion:nil];
答案 8 :(得分:-1)
LandingScreenViewController *nextView=[self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:^{}];