【问题标题】:How to implement Navigation Controller to get rid of creating Back Button?如何实现导航控制器以摆脱创建返回按钮?
【发布时间】:2011-09-05 13:33:56
【问题描述】:

我想使用导航控制器帮助我从主控制器视图导航到第一个视图和第二个视图,并且无需创建后退按钮,以便导航控制器为我处理它。

我该怎么做?我假设我会将导航控制器放在 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

【问题讨论】:

    标签: xcode button view uinavigationcontroller back


    【解决方案1】:

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

        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    
    [window makeKeyAndVisible];
    [window addSubview:navController.view];
    

    别忘了在你的 initWithNibName 方法中设置标题...

    self.title = @"Page Title";
    

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

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多