iOS:目前的视图控制器programmaticicallyly

Sal*_*ieh 34 objective-c uiviewcontroller ios uistoryboard presentviewcontroller

我正在使用该presentViewController:animated:completion:方法转到另一个视图控制器.

这是我的代码:

AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

此代码转到另一个,UIViewController但另一个控制器为空.我一直在使用故事板,但现在我需要在代码中完成.

Tim*_*Tim 50

如果您正在使用故事板,则可能不应该使用allocinit创建新的视图控制器.相反,看看你的故事板,找到你想要执行的segue ; 它应该有一个唯一的标识符(如果没有,你可以在右侧边栏中设置一个).

找到该segue的标识符后,向当前视图控制器发送一条-performSegueWithIdentifier:sender消息:

[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];
Run Code Online (Sandbox Code Playgroud)

这将导致故事板实例化AddTaskViewController,并以您为该segue定义的方式呈现它.


另一方面,如果您根本没有使用故事板,那么您需要为AddTaskViewController提供某种用户界面.最常见的方法是使用nib初始化控制器:而不是仅调用init,您将调用-initWithNibName:bundle:并提供包含add-task UI的.xib文件的名称:

AddTaskViewController *add = [[AddTaskViewController alloc]
                              initWithNibName:@"AddTaskView" bundle:nil];
[self presentViewController:add animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

(还有其他(不常见的)获取与新视图控制器关联的视图的方法,但这可能会给您带来最少的工作麻烦.)


小智 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];
Run Code Online (Sandbox Code Playgroud)

如果你没有在storyboard或nib文件中添加你的"添加"viewController并且想要创建整个programmaticaly,那么appDocs说:

如果无法在故事板或nib文件中定义视图,请覆盖loadView方法以手动实例化视图层次结构并将其分配给视图属性.