我有一个从GitHub(here)下载的漂亮项目,我正在玩它。该项目没有任何storyboard或xibs,只有一个viewController,它只使用viewController.h文件和viewController.m文件定义。
也许是一个菜鸟问题,但我能不能使用任何xib或故事板以编程方式将viewController1.h / m转换为viewController2.h / m?我在SO和其他地方发现了很多代码,允许一个人在一个故事板中以编程方式从一个视图到另一个视图,从一个xib到另一个或从记分板到xib(虽然不是相反),但没有关于如何从一个完全基于代码的vc到另一个。我发现的所有代码都要求您根据storyboard或xib文件的bundle位置定义视图,但我不想使用它们。
注意:我接受了我所做的答案,因为它的独创性/有趣性,但为了简单起见,我个人最终选择了同一个问题的答案(我看来是重复的):{{3 }}
答案 0 :(得分:2)
您可以使用[viewController presentViewController:anotherController animated:YES completion:nil];
以模态方式显示视图控制器。
另一种方法是使用UINavigationController
并执行[viewController.navigationController pushViewController:anotherController animated:YES];
仅当viewController
位于navigationController
答案 1 :(得分:1)
这是我的Context类,它更改了视图控制器。它适用于您自己的视图类或故事板视图类。
具体到你的问题看看open函数。如果在调用open时没有根控制器,我将其指定为根视图控制器。否则我会从根视图控制器中显示它。
import Foundation
import UIKit
private let _StoryBoard = UIStoryboard(name: "Main", bundle: nil)
private let _RootWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
public var ROOT_VIEW_CONTROLLER:UIViewController = C_RootViewController()
//abstract base of context classes
class Context:NSObject
{
class var STORYBOARD:UIStoryboard
{
return _StoryBoard
}
class var ROOTWINDOW:UIWindow
{
return _RootWindow
}
var _currentController:Controller!
class func reassignRootViewController(controller:UIViewController)
{
Context.ROOTWINDOW.rootViewController = controller
ROOT_VIEW_CONTROLLER = controller
}
func initController(controllerName:String)->Controller
{
return Context.STORYBOARD.instantiateViewControllerWithIdentifier(controllerName) as Controller
}
func initControllerFromStoryboard(storyboardName:String,controllerName:String)->Controller
{
var storyboard:UIStoryboard = UIStoryboard(name: storyboardName, bundle: nil)
return storyboard.instantiateViewControllerWithIdentifier(controllerName) as Controller
}
func open(controller:UIViewController)
{
if(Context.ROOTWINDOW.rootViewController == nil)
{
Context.ROOTWINDOW.rootViewController = ROOT_VIEW_CONTROLLER
Context.ROOTWINDOW.makeKeyAndVisible()
}
ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})
}
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
}