导航控制器 控制视图间的切换

委托下是一个UINavigationController导航控制器。三个视图的先后切换,分别为UITableViewController、UITableViewController、UIViewController。

导航控制器的

pushViewController:animated:

Pushes a view controller onto the receiver’s stack and updates the display.

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

是push视图控制器

1、创建一个空模板,在委托中建立一个导航控制器。

在AppDelegate.h中添加:

@property (strong, nonatomic) UINavigationController *myNaviController;

AppDelegate.m文件修改如下:

#import "AppDelegate.h"

#import "RootViewController.h"

@synthesize myNaviController;

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

{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Override point for customization after application launch.

RootViewController *rootView = [[RootViewController alloc] initWithStyle:UITableViewStyleGrouped];

self.myNaviController = [[UINavigationController alloc] initWithRootViewController:rootView];

[self.window addSubview:self.myNaviController.view];

[self.window setRootViewController:self.myNaviController];

self.window.backgroundColor = [UIColorwhiteColor];

[self.window makeKeyAndVisible];

returnYES;

}

2、创建一个子类,为UITableViewController的子类,名为RootViewController,不需要同时创建.xib。此为程序一开始看到的画面

RootViewController.h中添加如下:

@property (nonatomic, strong) NSMutableArray *mutableArrayForRootView;

RootViewController.m中修改如下:

#import "RootViewController.h"

#import "SongViewController.h"

@synthesize mutableArrayForRootView;

- (void)viewDidLoad

{

[super viewDidLoad];

[self setTitle:@"哈哈"];

self.mutableArrayForRootView = [[NSMutableArray alloc] init];

SongViewController *mySongViewController = [[SongViewController alloc] initWithStyle:UITableViewStylePlain];

mySongViewController.title = @"11111";

[self.mutableArrayForRootView addObject:mySongViewController];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

NSInteger numberOfSection = [mutableArrayForRootView count];

return numberOfSection;

}

- (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];

}

// Configure the cell...

UITableViewController *tableViewController = [self.mutableArrayForRootView objectAtIndex:indexPath.row];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

cell.textLabel.text = tableViewController.title;

return cell;

}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewController *tableViewController = [self.mutableArrayForRootView objectAtIndex:indexPath.row];

[self.navigationController pushViewController:tableViewController animated:YES];

}

画面如下:

可以按照类似的方法,在table中添加多个cell。

3、 创建一个子类,为UITableViewController的子类,名为SongViewController,不需要同时创建.xib。此视图为在root视图中,点击了table中的一个cell之后,看到的视图,

SongViewController.h文件添加如下:

@property (strong, nonatomic) NSArray *arrayOfSongViewController;

SongViewController.m文件修改如下:

#import "SongViewController.h"

#import "DetailViewControllerOfSong.h"

@implementation SongViewController

@synthesize arrayOfSongViewController;

- (void)viewDidLoad

{

[superviewDidLoad];

self.arrayOfSongViewController = [[NSArrayalloc]initWithObjects:@"aaa",@"bbbb",@"ccc",nil];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

// Return the number of sections.

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

// Return the number of rows in the section.

return [self.arrayOfSongViewControllercount];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *CellIdentifier = @"SongViewCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

cell.textLabel.text = [self.arrayOfSongViewController objectAtIndex:indexPath.row];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;

}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

DetailViewControllerOfSong *detailView = [[DetailViewControllerOfSong alloc]initWithNibName:@"DetailViewControllerOfSong" bundle:nil];

detailView.chooseMessage = [self.arrayOfSongViewController objectAtIndex:indexPath.row];

detailView.title = [self.arrayOfSongViewController objectAtIndex:indexPath.row];

[self.navigationController pushViewController:detailView animated:YES];

}

画面如下:

4、创建一个UIViewController子类,名称为DetailViewControllerOfSong,可以同时创建.xib。

DetailViewControllerOfSong.h文件修改如下:

#import <UIKit/UIKit.h>

@interface DetailViewControllerOfSong : UIViewController

@property (nonatomic, strong) NSString *chooseMessage;

@end

DetailViewControllerOfSong.m文件修改如下:

- (void)viewDidLoad

{

[superviewDidLoad];

// Do any additional setup after loading the view from its nib.

UIAlertView *alertView = [[UIAlertViewalloc] initWithTitle:@"message" message:self.chooseMessage delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil,nil];

[alertView show];

}

时间: 2024-10-10 08:55:12

导航控制器 控制视图间的切换的相关文章

UINavigationController&#160;导航控制器、页面间通信

UINavigationController 导航控制器.页面间通信 (2014-08-27 10:33:17) 转载 ▼ 正文开始 栈的方式管理? 就是先进后出的管理方式,通过出栈和入栈来展示各个视图控制器 UINavigationController的ContentView里始终显示栈顶控制器的view viewControllers属性存储了栈中的所有被管理的控制器 navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性,获取自己所在的UINavig

[BS-20] 导航控制器和视图控制器在添加控制器的区别

导航控制器和视图控制器在添加控制器的区别 1. 因导航控制器拥有导航栈,有一个普通视图控制器都没有的数组viewControllers,加入该数组中的视图控制器默认以push的方式进入导航栈.导航控制器有个[UINavigationController alloc] initWithRootViewController:rootVC]; 的初始化方法,调用该方法相当于把rootVC加入数组viewControllers的第一个位置,作为栈底部的rootVC是不会被pop出去的,与导航控制器共生死

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

UI: 操作导航控制器的视图控制器数组

- (void) goBack{ /* Get the current array of View Controllers */ NSArray *currentControllers = self.navigationController.viewControllers; /* Create a mutable array out of this array */ NSMutableArray *newControllers = [NSMutableArray arrayWithArray:c

导航控制器的知识总结

1.导航控制器的功能和介绍 [注]导航控制器,是UIKit框架提供的一个容器视图控制器,用于切换拥有明确层次关系的视图.即由一级视图切换到二级视图,而不是平级视图间的切换. [注]导航中视图控制器的层次结构,称为栈结构. 2.如何使用导航控制器实现界面之间的跳转 <1>显示一个界面,显示导航条 //使用导航控制器 //1.创建导航控制器,rvc放到导航控制器中 //2.导航控制器作为window根视图控制器 //导航条大小: 320X44 RootViewController *rvc = [

IOS之导航控制器

UINavigationController是用于构建分层应用程序的主要工具,主要采用栈形式来实现视图.任何类型的视图控制器都可放入栈中.在设计导航控制器时需要指定根视图即用户看到的第一个视图.根视图控制器是被导航控制器推入到栈中的第一个视图控制器.当用户查看下一个试图时,栈中将加入一个新的视图控制器,它所控制的视图将展示给用户.我们可以通过导航按钮来操作分层的应用程序,用它来控制视图的推入或推出. 1.把子控制器添加到导航控制器中常用的方法 //创建视图控制器 JRViewController

ios入门笔记(导航控制器)

1.删除故事板中默认的视图控制器,和与之对应的.h.m文件 2.从对象库拖导航控制器对象到编辑器中(会好像加了两个场景) 3.添加两个类,第一个为UINavigationCOntroller子类关联到导航控制,第二个为UIViewCOntroller子类关联到根视图 和其他视图 (class是自己的命名,subclassof必须选择相应的父类) 4.关联完成后可以更改相应控制器的标签让其编程时更友好(这里的标签与底层的代码不关联) 5.导航控制器与视图控制器数据联系, 可在导航控制器.H中建立属

【iOS开发-24】导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果

(1)这里的动画效果指的是界面切换的动画效果,我们常见的又淡入淡出,右出左进等等,当然还有一些高级动画,这种动画适合游戏类的,对于一般APP会显得太花哨. (2)我们在此处没有增加任何框架(QuartzCore)也没有导入什么头文件(QuartzCore.h),就可以直接用CATransiton(相当于是CAAnimation的子类)来创建一个对象,如animation1. (3)创建完之后我们就对这个动画对象进行动画设置,这里面主要是涉及到type属性,而且值有两种:一种是调用系统自带的一些效

iOS 7 使用导航控制器后有关根视图高度及位置的那些事

自从iOS7 导航控制器导航控制条的 translucent属性默认为YES 后,在项目中有时候总会遇到这样或那样有关视图控制器的根视图位置引发的问题.比如在导航控制器的RootViewController里的时候,这时你会发现如果你在 - (void)viewDidLoad { NSLog(@"%f",self.view.bounds.size.height); } 你会发现值是568 而在其上添加视图的坐标y值的零点也是屏幕的最上边 但是为什么我们在根视图上添加tableView等