I want to use a Navigation Controller to help me navigate to the First View & Second View from Main Controller View and eliminating the need to create a Back button so Navigation Controller will handle it for me.
How can I do this? I’m assuming that I’ll put the Navigation Controller in MainWindow.xib.
Please guide me in editing the codes below to fully implement the Navigation Controller from the app.
Complete codes are here (both header and implementation):
MainControllerView.h code
#import <UIKit/UIKit.h>
@class FirstView;
@class SecondView;
@interface MainControllerView : UIViewController {
IBOutlet UILabel *label;
IBOutlet UIButton *firstView;
IBOutlet UIButton *secondView;
FirstView *firstView1;
SecondView *secondView1;
}
@property(nonatomic,retain) IBOutlet UILabel *label;
@property(nonatomic,retain) IBOutlet UIButton *firstView;
@property(nonatomic,retain) IBOutlet UIButton *secondView;
-(IBAction) FirstView:(id)sender;
-(IBAction) SecondView:(id)sender;
@end
MainControllerView.m
#import "MainControllerView.h"
#import "FirstView.h"
#import "SecondView.h"
@implementation MainControllerView
@synthesize label,firstView,secondView;
-(IBAction) FirstView:(id)sender
{
firstView1 = [[FirstView alloc]
initWithNibName:@"FirstView"
bundle:nil];
[self.view addSubview:firstView1.view];
}
-(IBAction) SecondView:(id)sender
{
secondView1 = [[SecondView alloc]
initWithNibName:@"SecondView"
bundle:nil];
[self.view addSubview:secondView1.view];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
FirstView.h
#import <UIKit/UIKit.h>
@class MainControllerView;
@interface FirstView : UIViewController {
IBOutlet UIButton *backButton;
MainControllerView *mainControllerView;
}
@property(nonatomic,retain) IBOutlet UIButton *backButton;
@end
FirstView.m
#import "FirstView.h"
#import "MainControllerView.h"
@implementation FirstView
@synthesize backButton;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(5,18,100,40);
[button setImage:[UIImage imageNamed:@"backbutton.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(BackAction:) forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor clearColor];
[self.view addSubview:button];
// Do any additional setup after loading the view from its nib.
}
-(IBAction) BackAction:(id)sender
{
mainControllerView = [[MainControllerView alloc]
initWithNibName:@"MainControllerView"bundle:nil];
[self.view addSubview:mainControllerView.view];
[mainControllerView.view release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
SecondView.h
#import <UIKit/UIKit.h>
@class MainControllerView;
@interface SecondView : UIViewController {
IBOutlet UIButton *backButton;
MainControllerView *mainControllerView;
}
@property(nonatomic,retain) IBOutlet UIButton *backButton;
@end
SecondView.m
#import "SecondView.h"
#import "MainControllerView.h"
@implementation SecondView
@synthesize backButton;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(5,18,100,40);
[button setImage:[UIImage imageNamed:@"backbutton.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(BackAction:) forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor clearColor];
[self.view addSubview:button];
// Do any additional setup after loading the view from its nib.
}
-(IBAction) BackAction:(id)sender
{
mainControllerView = [[MainControllerView alloc]
initWithNibName:@"MainControllerView"bundle:nil];
[self.view addSubview:mainControllerView.view];
[mainControllerView.view release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
In your app delegate, just add this code on applicationDidFinishLoading method.
And dont forget to set the title in your initWithNibName method…
Or you can start your project by choosing the navigation controller template and still dont forget to set the title…