views:

123

answers:

1

Hi there, I'm creating an app with one UIViewController and many UIViews. I have MainViewController with a UIView underneath it that displays when loaded up and a few other UIViews all in the MainWindow.xib. How do I go about switching from one View to the next?

Update:

Thanks for the reply.

I have added MainViewController to my appDelegate.

On FinishedLaunching: [window addSubview:[viewController view]];

That View Controller has a function in it called goToNextPage.

-(IBAction)goToNextPage:(id)sender{

[self.view removeFromSuperview];
[self.view addSubview:tableOfContents];

}

In Interface Builder I have that View Controller added to MainWindow.xib. Under that View Controller I have a UIView (called Cover) that loads as it's child on startup and another UIView (eventually many) named TableOfContents that is on its own.

I tried to post an image of my MainWindow.xib here but apparently my Reputation isn't high enough.

The UIView Cover has a button on it that is linked to the goToNextPage function.

When I hit the button the page goes blank as if the one view is successfully being removed but the next is not being loaded.

How do I get the goToNextPage function to switch the preloaded UIView Cover with the other UIView called TableOfContents?

Another Edit:

BookTest6AppDelegate.h:

#import <UIKit/UIKit.h>

@class MainViewController;

@interface BookTest6AppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;
    IBOutlet MainViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MainViewController *viewController;

@end

BookTest6AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

[window addSubview:[viewController view]];
[window makeKeyAndVisible];

return YES;

}

MainViewController.h

#import <UIKit/UIKit.h>

@class TableOfContents;

@interface MainViewController : UIViewController {

    IBOutlet TableOfContents *tableOfContents;
}

@property (nonatomic, retain) IBOutlet TableOfContents *tableOfContents;

-(IBAction)fGoToTableOfContentsController:(id)sender;
-(IBAction)fGoToNextPageController:(id)sender;

@end

MainViewController.m

#import "MainViewController.h"
#import "TableOfContents.h"

@implementation MainViewController

@synthesize tableOfContents;

-(IBAction)fGoToTableOfContentsController:(id)sender{

    [self.view removeFromSuperview];
    [self.view addSubview:self.tableOfContents];

}

-(IBAction)fGoToNextPageController:(id)sender{

}

My UIView Classes basically just initiate buttons that link to the functions defined in MainViewController.h.

+2  A: 

First you need to know when switching from one to another.

Then you say it to your MainController and addSubView to the mainController.view an another view.

Maybe if you give us more informations or code we could help you a little more :-)

Good Luck
Vincent

Edit :

[self.view removeFromSuperview];

Here you are removing the window view. I think it's not the better way ^^ Try

[ viewController.view removeFromSuperview ];
:-)

Does it work better ?

Edit : Edit bis : han, it's my fault. You need to remove controller and add another one in the app delegate and not in your mainController (you could do it too, but no with your actual code). You have two options : 1°) Declare all your controllers in your app delegate. 2°) Declare all your controllers in one main controller. But the main controller would be here to "control" others one.

Vinzius
Thanks for the reply.
emachine
I modified my question if you'd like to take another look. Thanks
emachine
I left another edit with most of my code in it. From your example I would have to initiate another viewController object. Is that correct?
emachine
What I think you din't understand is how to remove a controller when his view were added. To add his view you did it : addSuview:controller.view but to remove, you need to do [ controller.view removeFromSuperview ] (and maybe [ controller release if needed) and then adding an other controller view ^^
Vinzius