如何实现导航控制器摆脱创建后退按钮?

时间:2011-09-04 02:20:27

标签: xcode button view uinavigationcontroller back

我想使用导航控制器来帮助我导航到First View&从主控制器查看第二个视图,无需创建后退按钮,导航控制器将为我处理它。

我该怎么做?我假设我将导航控制器放在MainWindow.xib中。

请指导我编辑以下代码,从应用程序中完全实现导航控制器。

这里有完整的代码(标题和实现):

MainControllerView.h代码

#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

1 个答案:

答案 0 :(得分:2)

在您的app委托中,只需在applicationDidFinishLoading方法上添加此代码。

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

[window makeKeyAndVisible];
[window addSubview:navController.view];

并且不要忘记在initWithNibName方法中设置标题......

self.title = @"Page Title";

或者您可以通过选择导航控制器模板来启动项目,但仍然不要忘记设置标题...