如何启动另一个没有故事板的视图控制器?

How do I start another view controller with no storyboard?

我没有使用故事板或任何东西。我只是创建 cocoa 类 并将它们单独链接起来。我可以加载默认的 View Controller,即 SplashViewController,但我无法通过那里。

我有 php、android 编程和 python 方面的经验,但我对 Obj-C 和 iOS 框架的工作原理一无所知: (

SplashViewController.m

-(void)initializeInterface
{
    //Initialize start button
    [self.startButton addTarget:self action:@selector(startActivity) forControlEvents:UIControlEventTouchDown];

    //Initialize fading backgrounds
    [self animateImages];


}
-(void)startActivity
{

    PhoneViewController *phoneView = [[PhoneViewController alloc] initWithNibName:@"PhoneViewController" bundle:nil];

    [self.navigationController pushViewController:phoneView animated:YES];


}

SplashViewController.h

#import <UIKit/UIKit.h>
#import "PhoneViewController.m"

@class PhoneViewController;

@interface SplashViewController : UIViewController

@property (strong, nonatomic) PhoneViewController * phoneViewController;

@property UIImage *splashbg1;
@property UIImage *splashbg2;

@property (nonatomic, retain) IBOutlet UIImageView *splashbg;
@property (nonatomic, retain) IBOutlet UIButton *startButton;

-(void)initializeInterface;
-(void)animateImages;
-(void)startActivity;

@end

编辑

classAppDelegate.m

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    //Move from delegate view controller to root view controller
    self.window.rootViewController=[SplashViewController new];

    [self.window makeKeyAndVisible];
    return YES;
}

将启动视图控制器包装在导航控制器中。

否则,您的初始视图控制器的 navigationController 属性 为 nil,pushViewController 无效。

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: splashViewController];

要从一个 UIViewController 移动到另一个 UIViewController,您可以尝试以下操作

如果 SecondViewController *secondViewController 是您要移入的 UIViewController,那么您可以执行以下操作:

[self presentViewController: secondViewController animated:YES completion:nil];

这是当您的 UIViewController 没有嵌入到 UINavigationController 中时。

可以完全在代码中创建视图控制器而不使用故事板或 XIB 文件,但不推荐这样做。这就像尝试用汇编语言编写一个复杂的用户应用程序。从有必要的那一天起,最先进的技术就已经发展起来了。有更好的工具。使用它们。

自己创建一切都非常复杂,而且没有很好的文档记录。您正在为一个非常令人沮丧、容易出错的过程做好准备。自 2009 年以来,我几乎全职从事 iOS 开发工作,我不会尝试这样做。

也就是说,如果您是受虐狂,您会使用 initWithNibName:bundle: 创建视图控制器,为两个参数传入 nil,然后实现 loadView 方法。在 loadView 中,您将创建并安装视图层次结构。

如果您是 iOS/Objective-C 的新手,请勿这样做。这就像您第一次涉足 UNIX 时尝试用机器代码编写内核设备驱动程序一样。

如下更改 AppDelegate 方法 -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:[SplashViewController new]];

    //Move from delegate view controller to root view controller
    self.window.rootViewController=navcon;

    [self.window makeKeyAndVisible];
    return YES;
}

你的代码有问题,你没有使用任何 navigationController,它可以让你推送或弹出 UIViewController。做上面你可以使用你的方法 -(void)startActivity 来开始一个新的 ViewController.