1

我通常只为我的 iOS 使用故事板,但需要集成一个不使用故事板的 SDK,而不是 xib。我的初始视图控制器来自情节提要,当按下按钮(IBAction)时,我希望它转到 xib 视图控制器,但不确定如何以编程方式执行此操作。这是我的 AppDelegate:

 //AppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:...{   

// set to storyboard on launch
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard"
                                                         bundle: nil];

UIViewController* viewController = [mainStoryboard instantiateInitialViewController];
[self.window setRootViewController:viewController];

 [window makeKeyAndVisible];
 return YES;
 }

这是我的代码.h:

 //mainVC.h
 #import <UIKit/UIKit.h>

 @interface MainVC : UIViewController{
 UIWindow *window;
 UINavigationController *navigationController;
 }

 @property (nonatomic, retain) IBOutlet UIWindow *window;
 @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
 @property (nonatomic, retain) IBOutlet UIButton *buttonScan;

 -(IBAction) ActionScan;

 @end

还有他们:

 //mainVC.m
 @interface MainVC ()

 @end

 @implementation MainVC

 @synthesize window;
 @synthesize navigationController;
 @synthesize buttonScan;

 - (IBAction)ActionScan{

window.rootViewController = navigationController;
[window makeKeyAndVisible];

 }
4

3 回答 3

1

创建您的 xib viewController 的实例initWithNibName

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

& 然后将此控制器实例推送到导航控制器上

[self.navigationController pushViewController:desController animated:YES]
于 2013-10-25T17:02:24.403 回答
0

通常你不会直接设置窗口的 rootViewController。相反,您应该使用

 - (IBAction)ActionScan{
    [self presentViewController:self.navigationController animated:YES completion:nil]; 
 }

显示您的下一个视图控制器。这个问题的第一个和公认的答案给出了它是如何工作的更详细的解释。

更改 iOS 窗口的根视图控制器

设置 window.rootViewController 和调用 [window makeKeyAndVisible] 通常发生在您的应用程序委托中,但由于您使用的是故事板,所以它在后台为您完成。

此外,除非您使用多个窗口,否则您可以使用应用程序委托单例对象从任何地方访问您的 UIWindow。

MyAppDelegateClass *appDelegate = (MyAppDelegateClass*)[[UIApplication sharedApplication] delegate];
UIWindow *mainWindow = appDelegate.window;
于 2013-10-25T16:46:29.610 回答
0

在情节提要的视图控制器中,代码如下:

  1. alloc & init 目标视图控制器:

    UIViewController *desController = [[SomeViewController alloc]init];

  2. 显示目标视图控制器:

    [self.navigationController pushViewController:desController animated:YES]

    或者

    [self.navigationController presentViewController:desController animated:YES completion:nil

于 2013-10-25T16:27:30.147 回答