Abel Chua
Abel Chua

Reputation: 40

How do I start another view controller with no storyboard?

I'm not using a storyboard or anything. I'm just creating the cocoa classes and linking them up individually. I can get to load up the default View Controller which is SplashViewController but i can't get past there.

I have experience in php, android programming and python, but i'm totally clueless on how Obj-C and how the iOS framework works :(

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

EDIT

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;
}

Upvotes: 0

Views: 114

Answers (4)

paulvs
paulvs

Reputation: 12053

Wrap your splash view controller in a navigation controller.

Otherwise, the navigationController property of your splash view controller is nil and pushViewController has no effect.

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

Upvotes: 1

Dharmendra Chaudhary
Dharmendra Chaudhary

Reputation: 267

Change you AppDelegate method as below -

- (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;
}

Problem in your code, you have not taken any navigationController, that enables you push or pop UIViewController. Doing above you can use your method -(void)startActivity to Start a new ViewController.

Upvotes: 0

Duncan C
Duncan C

Reputation: 131418

It is possible to create your view controllers entirely in code without using Storyboards or XIB files, but it's not recommended. It's like trying to write a complex user application in assembler. The state of the art has evolved since the days when that was necessary. There are better tools. Use them.

Creating everything yourself is both quite complex and not very well documented. You are setting yourself up for a very frustrating, error-prone process. I've been doing iOS development pretty much full time since 2009, and I would not attempt this.

That being said, if you are a masochist, you would create your view controller using initWithNibName:bundle:, passing in nil for both parameters, and then implement the loadView method. In loadView you're create your view hierarchy and install it.

If you are new to iOS/Objective-C, DO NOT DO THIS. It is like trying to write a kernel device driver in machine code as your first foray into UNIX.

Upvotes: 0

KrishnaCA
KrishnaCA

Reputation: 5695

To move from one UIViewController to other UIViewController, you can try the following things

If SecondViewController *secondViewController is the UIViewController you want to move in to, then your can do the following:

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

This is when you UIViewController is not embedded inside a UINavigationController.

Upvotes: 1

Related Questions