您的位置:首页 > 产品设计 > UI/UE

iOS学习笔记-048.UINavigationController——导航控制器

2017-03-04 16:16 525 查看
UINavigationController导航控制器
一UINavigationController的使用步骤

二UINavigationController的子控制器

三如何修改导航栏的内容

四使用UINavigationController

五图示

六使用Storyboard实现的图示

七生命周期 内存警告

UINavigationController——导航控制器

一、UINavigationController的使用步骤

1. 初始化 UINavigationController

2. 设置UIWindow的rootViewController为UINavigationController

3. 根据具体情况,通过push方法添加对应个数的子控制器


二、UINavigationController的子控制器

UINavigationController以栈的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;

使用push方法能将某个控制器压入栈
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

使用pop方法可以移除控制器将栈顶的控制器移除
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

回到指定的子控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

回到根控制器(栈底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;


三、如何修改导航栏的内容

导航栏的内容由栈顶控制器的navigationItem属性决定

UINavigationItem有以下属性影响着导航栏的内容
左上角的返回按钮
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;

中间的标题视图
@property(nonatomic,retain) UIView          *titleView;

中间的标题文字
@property(nonatomic,copy)   NSString        *title;

左上角的视图
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;

UIBarButtonItem *rightBarButtonItem  右上角的视图
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;


导航栏上的标题是由栈顶控制器决定的,导航栏上的 “返回”是由上一个决定的

-(void)viewDidLoad{
[super viewDidLoad];
//第一个控制器的标题显示
self.navigationItem.title = @"第一个控制器";
//第二个控制器上显示
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
}


四、使用UINavigationController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];

// 1.创建导航控制器
UINavigationController *nav = [[UINavigationController alloc] init];
// 2.设置导航控制器为window的根控制器
self.window.rootViewController = nav;

// 创建第一个控制器并添加到导航控制器中
NJOneViewController  *one = [[NJOneViewController  alloc] init];
[nav pushViewController:one animated:YES];

/*
// 3.添加子控制器到导航控制器中
// 创建一些子控制器
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor   = [UIColor redColor];

UIViewController *vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor   = [UIColor greenColor];

UIViewController *vc3 = [[UIViewController alloc] init];
vc3.view.backgroundColor   = [UIColor purpleColor];

// 添加子控制器到导航控制器中
[nav pushViewController:vc1 animated:YES];
[nav pushViewController:vc2 animated:YES];
[nav pushViewController:vc3 animated:YES];
*/

[self.window makeKeyAndVisible];
return YES;
}


- (IBAction)jump2Two:(id)sender {
// 1.创建第二个控制器
NJTwoViewController *two = [[NJTwoViewController alloc] init];
// 2.将第二个控制器添加到导航控制器中
// 只要当前控制器是导航控制器的子控制器,就快要通过该属性直接获取到当前控制器所在的导航控制器
[self.navigationController pushViewController:two animated:YES];
}


五、图示



六、使用Storyboard实现的图示

代码能做的,Storyboard不一定都能做,下面的第三个返回到第二个,使用的是代码

- (IBAction)xmBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}




七、生命周期 – 内存警告



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: