iphone视图间跳转之三:导航栏控制器

        导航控制器是UINavigationController作为根控制器,根试图控制器是根控制器控制的第一个试图,作为启动第一次加载的试图。而且只有在导航控制器中才有根试图控制器之称。所以根控制器与根试图控制器有本质的区别,程序可以从根试图控制器发起其它试图。

      下面看看导航栏控制器的原理图:

       

 

导航控制器它们的试图是由一个栈结构来管理,这个和Android里面的Activity栈类似。

我们现在来看看导航栏控制器试图跳转的代码实现步骤:

1、创建一个Navigation-based Application的控制器类,由于导航栏控制器常常和表试图搭配用,所以在生成的根试图控制器默认继承UITableViewController。为了简单起见,我先让这个根试图控制器继承普通的试图控制器UIViewController。
UITabBarController是控件的视图控制器,可以作为根控制器,这里我将介绍标签栏控制器来实现视图之间的跳转。

2、点击RootViewController,删除默认表试图,创建新的普通视图,然后按下图连线,如下图

     

3、创建其它普通视图,在视图跳转的过程控制中,下面的代码分成连线的方式与代码方式注册前进按钮

 

运行结果如下图:

程序运行出现黄色试图——>红色试图——>绿色试图

          

 

代码:

RootViewController.h

#import <UIKit/UIKit.h>
#import "GreenViewControl.h"
#import "RedViewControl.h"
@interface RootViewController : UIViewController
{
    GreenViewControl *  green;
    RedViewControl* red;
}
@property(nonatomic,retain) GreenViewControl* green;
@property(nonatomic,retain) RedViewControl* red;

-(IBAction)moveToNextView:(id)sender;

@end

RootViewController.m

#import "RootViewController.h"

@implementation RootViewController

@synthesize red; 
@synthesize green;

-(IBAction)moveToNextView:(id)sender
{
    RedViewControl* redCV =  [[RedViewControl alloc] initWithNibName:@"RedViewControl" bundle:nil];
    self.red = redCV;
    [redCV release];
    [self.navigationController pushViewController:self.red animated:YES];
    
   
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

/*
 // Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
	// Return YES for supported orientations.
	return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
 */

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // Delete the row from the data source.
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
    else if (editingStyle == UITableViewCellEditingStyleInsert)
    {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    /*
    <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
    // ...
    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
	*/
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload
{
    [super viewDidUnload];

    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}

- (void)dealloc
{
    [red dealloc];
    [green dealloc];
    [super dealloc];
}

@end

RedViewControl.h

#import <UIKit/UIKit.h>

@interface RedViewControl : UIViewController
{
    UIViewController* green;
}
@property(nonatomic,retain) UIViewController* green;
-(IBAction)moveToNextView:(id)sender;
@end


RedviewControl.m

#import "RedViewControl.h"


@implementation RedViewControl
@synthesize green;

-(IBAction)moveToNextView:(id)sender
{
    UIViewController* greenCV = [[UIViewController alloc] initWithNibName:@"GreenViewControl" bundle:nil];
    self.green = greenCV;
    [self.navigationController pushViewController:self.green animated:YES];
    
    
    
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (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];
    
    self.navigationItem.title = @"绾㈣壊";
    
    UIBarButtonItem* nextButton = [[UIBarButtonItem alloc] initWithTitle:@"鍓嶈繘" style:UIBarButtonItemStyleBordered target:self action:@selector(moveToNextView:)];
    self.navigationItem.rightBarButtonItem =  nextButton;
    [nextButton release];
    // 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);
}

-(void) dealloc
{
    [green dealloc];
    [super dealloc];
}
@end

GreenViewControl.h

#import <UIKit/UIKit.h>

@interface GreenViewControl : UIViewController

@end


GreenViewControl.m

#import "GreenViewControl.h"

@implementation GreenViewControl

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (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];
    self.navigationItem.title = @"缁胯壊";
    // 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


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值