UINavigationController
导航控制器,管理多个视图控制器,
导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器
从上一级推到下一级的方法我们用push这个方法,navigationController这个属性,可以找到当前这个视图控制器由哪个导航控制器控制的。
[self.navigationController pushViewController:seVC animated:NO];
//放回根视图控制器的界面用这个方法
[self.navigationController popToRootViewControllerAnimated:NO];
//先找到导航控制器,导航控制器有一个非常重要的属性,viewControllers,它是存储导航控制器所有子视图控制器的一个数组集合,通过下标0可以找到导航控制器的根视图控制器,然后作为目标对象,pop回去。
//推回上一页面
[self.navigationController popViewControllerAnimated:NO];
#import "AppDelegate.h"
#import "RootViewController.h"
RootViewController *rootVC = [[RootViewController alloc] init];
//导航控制器是一个容器视图控制器,主要控制具有层级关系的视图控制器。
//创建导航控制器对象的时候 必须指定一个根视图控制器给他管理。
//类似于登录注册找回三个子控制器和根控制器的rootVC 与 loginVC 的关系
UINavigationController *naVC = [[UINavigationController alloc] initWithRootViewController:rootVC];
//window的根视图控制器是导航控制器,而导航控制器也有一个根视图控制器,是rootVC
self.window.rootViewController = naVC;
[rootVC release];
[naVC release];
属性传值
谁接受值 谁写属性
属性传值,一般用于前面的界面传到后面的界面 这种情况下用属性传值比代理传值方便,给对象创建一个属性用来传递就可以实现了.
传值
代理传值
谁传值谁加代理(代理接收方,并不一定是传值的那个变量,可以理解为 代理某 执行 某方法),谁代理谁加协议,谁接收值就要接收协议
//ThirdViewController.h
@interface ThirdViewController : UIViewController<FourthViewControllerDelegate>
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, retain) UIButton *intoBt;
@end
//ThirdViewController.m
- (void)sendTFValueToThird:(NSString *)str
{
_label.text = str;
}
- (void)intoView
{
FourthViewController *fourVC = [[FourthViewController alloc] init];
//属性传值
// fourVC.l = _label;
//代理传值 在从第三页推向第四页的时候第四页接受代理
fourVC.delegate = self;
[self.navigationController pushViewController:fourVC animated:NO];
[fourVC release];
}
//FourthViewController.h
//增加协议
@protocol FourthViewControllerDelegate <NSObject>
- (void)sendTFValueToThird:(NSString *)str;
@end
@interface FourthViewController : UIViewController
@property (nonatomic, retain) UITextField *tf;
@property (nonatomic, retain) UIButton *bt;
@property (nonatomic, assign) id<FourthViewControllerDelegate> delegate;
@end
小技巧
怎么像safari一样滑动的时候隐藏navigationbar?
navigationController.hidesBarsOnSwipe = Yes
怎么把我的navigationbar弄成透明的而不是带模糊的效果?
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;