51.UINavigationController的子控制器

52.修改导航栏的内容

53.控制器的生命周期

54.Segue

55.Segue的属性

56.手动型Segue

57.自动型Segue

58.performSegueWithIdentifier:sender:方法的完整执行过程

59.做一些跳转前的准备工作并且传入创建好的Segue对象

60.控制器的数据传递

{

  swift多么好的一个东西啊!

  嫁给程序员的好处
  1.男程序员不修边幅,所以家里不用保持太整洁。
  2.男程序员很难有女朋友,所以他会对目前的这个死心塌地。
  3.男程序员呆板无趣,根本不活在人的社会中,只活在图表的世界里所以美女不必花心思去取悦他。
  4.男程序员视修理东西为娱乐,在美女生气时大可在他面前摔东西出气,他会很高兴的帮美女修好又不必花钱。
  5.男程序员IQ都不低,所以嫁给他后可以生一堆这样的儿子考一堆的满分让美女去跟街坊炫耀。
  6.男程序员待在办公室的时间比在家里多,所以嫁给他以后还是很自由。
  7.男程序员口才太差根本讲不过美女,所以美女可以尽情用言辞凌辱他。
  8.男程序员最讲求【理】,所以美女有理的话他服美女;他如果有理,美女就不要跟他讲理,他对美女一点办法也没有。
  9.男程序员薪水不错,自己不会娱乐不怎么花钱也很少女人花他钱,所以美女可以大大方方的花他钱,并且告诉他这是促进经济繁荣,他做出来的东西才有人买。
  10.男程序员除了以上之外毫无魅力可言,所以嫁给他不用担心他有外遇。

}

 

 

51.UINavigationController的子控制器

   UINavigationController以栈的形式保存子控制器 
  @property(nonatomic,copy) NSArray *viewControllers;
  @property(nonatomic,readonly) NSArray *childViewControllers;
  - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;//使用push方法能将某个控制器压入栈
  - (UIViewController *)popViewControllerAnimated:(BOOL)animated;//使用pop方法可以移除控制器,将栈顶的控制器移除      
  - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;//回到指定的子控制器
  - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;//回到根控制器(栈底控制器)

52.修改导航栏的内容
  导航栏的内容由栈顶控制器的navigationItem属性决定
  UINavigationItem有以下属性影响着导航栏的内容
  @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;//左上角的返回按钮
  @property(nonatomic,retain) UIView          *titleView;//中间的标题视图
  @property(nonatomic,copy)   NSString        *title;//中间的标题文字
  @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;//左上角的视图
  @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;// 右上角的视图

53.控制器的生命周期
 
  - (void)viewDidLoad{ [super viewDidLoad];}//view加载完毕调用
  - (void)viewWillAppear:(BOOL)animated{  [super viewWillAppear:animated]; }//view即将显示到window上
  - (void)viewDidAppear:(BOOL)animated{[ [super viewDidAppear:animated];]}//view显示完毕(已经显示到窗口)
  - (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];}//view即将从window上移除(即将看不见)
  - (void)viewDidDisappear:(BOOL)animated{[super viewDidDisappear:animated];}//view从window上完全移除(完全看不见)
  - (void)viewWillUnload{[super viewWillUnload];}//view即将销毁的时候调用
  - (void)viewDidUnload{[super viewDidUnload];}//view销毁完毕的时候调用
  - (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; }// 当接收到内存警告的时候

54.Segue
  Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)

55.Segue的属性
   每一个Segue对象,都有3个属性
  @property (nonatomic, readonly) NSString *identifier;//唯一标识
  @property (nonatomic, readonly) id sourceViewController;//来源控制器
  @property (nonatomic, readonly) id destinationViewController;//目标控制器

56.手动型Segue
  按住Control键,从来源控制器拖线到目标控制器
  手动型的Segue需要设置一个标识 inditify
  在恰当的时刻,使用perform方法执行对应的Segue
  [self performSegueWithIdentifier:@"login2contacts" sender:nil];
  Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用

57.自动型Segue
  按住Control键,直接从控件拖线到目标控制器
  如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue”

58.performSegueWithIdentifier:sender:方法的完整执行过程
  [self performSegueWithIdentifier:@“login2contacts” sender:nil];//这个self是来源控制器
  根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象
  设置Segue对象的sourceViewController(来源控制器)
  新建并且设置Segue对象的destinationViewController(目标控制器)

59.做一些跳转前的准备工作并且传入创建好的Segue对象
  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
  这个sender是当初performSegueWithIdentifier:sender:中传入的sender
  调用Segue对象的- (void)perform;方法开始执行界面跳转操作
  取得sourceViewController所在的UINavigationController
  调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转

60.控制器的数据传递
  控制器之间的数据传递主要有2种情况:顺传和逆传
  顺传:
  控制器的跳转方向: A ->C
  数据的传递方向: A -> C
  数据的传递方式:在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器C, 直接给控制器C传递数据
  要在C的viewDidLoad方法中取得数据,来赋值给界面上的UI控件

逆传:
  控制器的跳转方向: A -> C
  数据的传递方向: C -> A
  数据的传递方式: 让A成为C的代理, 在C中调用A的代理方法,通过代理方法的参数传递数据给A

分类: iOS技术分享