请选择 进入手机版 | 继续访问电脑版
查看: 1345|回复: 0

[教程] [无脑码农CrossApp笔记]--导航视图CANavigationController

[复制链接]
最佳答案
0 
无脑码农 发表于 2015-9-24 10:18:07 | 显示全部楼层 |阅读模式
CANavigationController

版本:CrossApp 1.19.0

作者:无脑码农

简介
CANavigationController是CAViewController的子类,它的作用是管理多个CAViewController,我们要明白的是CANavigationController是使用堆栈的方式管理的,即我们每往CANavigationController添加一个CAViewController,则进行一次堆栈的操作,每次移除则进行一次出栈操作。
基类
CAViewController, CANavigationBarDelegate

属性
访问修饰符      类型                         名称
protected  bool                         m_bNavigationBarHidden
protected  CABarVerticalAlignment       m_eNavigationBarVerticalAlignment
protected  bool                         m_bTouchMoved
protected  CAImage*                     m_pNavigationBarBackGroundImage
protected  CAColor4B                    m_sNavigationBarBackGroundColor
protected  CAColor4B                    m_sNavigationBarTitleColor
protected  CAColor4B                    m_sNavigationBarButtonColor
protected  float                        m_fProgress
protected  CADeque<CAViewController*>   m_pViewControllers
protected  CADeque<CANavigationBar*>    m_pNavigationBars
protected  CADeque<CAView*>             m_pContainers
protected  CADeque<CAView*>             m_pSecondContainers
protected  bool                         m_bPopViewController
protected  CCSize                       m_tNavigationBarSize
函数
  1. public:
  2.     /*
  3.     *使用CAViewController来初始化,这个是必须的
  4.     *viewController:用来初始化CAViewController,它将被CANavigationController压栈
  5.     *var:CANavigationBar的现实样式(CABarVerticalAlignmentTop:顶部显示,CABarVerticalAlignmentBottom,底部显示)
  6.     */
  7.     virtual bool initWithRootViewController(CAViewController* viewController,CABarVerticalAlignment var = CABarVerticalAlignmentTop);
  8.     /*
  9.     *替换栈顶的viewController
  10.     *viewController: 新的viewController
  11.     *animated:是否播放动画
  12.     */                                       
  13.     virtual void replaceViewController(CAViewController* viewController, bool animated);
  14.     /*
  15.     *将新的viewController压入栈顶
  16.     *viewController: 新的viewController
  17.     *animated:是否播放动画
  18.     */
  19.     virtual void pushViewController(CAViewController* viewController, bool animated);

  20.     /*
  21.     *移除栈顶的viewController
  22.     *animated:是否播放动画
  23.     */
  24.     CAViewController* popViewControllerAnimated(bool animated);

  25.     /*
  26.     *移除根的viewController
  27.     *animated:是否播放动画
  28.     */
  29.     void popToRootViewControllerAnimated(bool animated);
  30.     /*
  31.     *移除第一个viewController
  32.     *animated:是否播放动画
  33.     */
  34.     CAViewController* popFirstViewController();

  35.     /*
  36.     *根据索引值移除viewController
  37.     *animated:是否播放动画
  38.     */
  39.     CAViewController* popViewControllerAtIndex(int index);

  40.     /*
  41.     *根据索引值获取viewController
  42.     */
  43.     CAViewController* getViewControllerAtIndex(int index);
  44.     /*
  45.     *返回最后一个ViewController
  46.     */
  47.     CAViewController* getBackViewController();
  48.     /*
  49.     *当前栈内viewController总数
  50.     */
  51.     inline unsigned long getViewControllerCount() {return m_pViewControllers.size();
  52.     /*
  53.     *是否隐藏navigationBar
  54.     */
  55.     virtual void setNavigationBarHidden(bool hidden, bool animated);

  56.     /*
  57.     *更新navigationBarItem
  58.     */
  59.     void updateItem(CAViewController* viewController);

  60.     /*
  61.     *ccTouchBegan:触摸开始
  62.     */
  63.     virtual bool ccTouchBegan(CATouch *pTouch, CAEvent *pEvent);

  64.     /*
  65.     *ccTouchMoved:触摸移动
  66.     */   
  67.     virtual void ccTouchMoved(CATouch *pTouch, CAEvent *pEvent);

  68.     /*
  69.     *ccTouchEnded:触摸结束
  70.     */   
  71.     virtual void ccTouchEnded(CATouch *pTouch, CAEvent *pEvent);

  72.     /*
  73.     *ccTouchCancelled:触摸非正常结束(例如:电话或锁屏)
  74.     */   
  75.     virtual void ccTouchCancelled(CATouch *pTouch, CAEvent *pEvent);

  76. protected:
  77.     /*
  78.     *viewDidLoad:当前控制器的view被加载完毕后调用
  79.     */  
  80.     virtual void viewDidLoad() {};

  81.     /*
  82.     *viewDidUnload:当前控制器的view被移除掉时调用
  83.     */  
  84.     virtual void viewDidUnload() {};

  85.     /*
  86.     *viewDidAppear:显示时被调用
  87.     */     
  88.     virtual void viewDidAppear() {};

  89.     /*
  90.     *viewDidDisappear:隐藏时被调用
  91.     */      
  92.     virtual void viewDidDisappear() {};

  93.     /*
  94.     *reshapeViewRectDidFinish:刷新View的Rect
  95.     */   
  96.     virtual void reshapeViewRectDidFinish() {};
复制代码


创建与初始化


  1. bool RootWindow::init()
  2. {
  3.     if (!CAWindow::init())
  4.     {
  5.         return false;
  6.     }
  7.     //创建Navigation
  8.     CANavigationController* _viewController = new CANavigationController();
  9.     //创建Navigation的第一个Controller
  10.     FirstViewController* first = new FirstViewController();
  11.       first->init();
  12.     //使用一个controller初始化Navigation(必须)
  13.     _viewController->initWithRootViewController(first);
  14.     //RootWindow加载Navigation
  15.     this->setRootViewController(_viewController);
  16.     //释放内存
  17.     first->release();
  18.     //释放内存
  19.     _viewController->release();
  20.     return true;
  21. }
复制代码


样式属性
可控制样式:barItem位置、标题、左按钮、右按钮

  1. bool RootWindow::init()
  2. {
  3.     if (!CAWindow::init())
  4.     {
  5.         return false;
  6.     }
  7.     //创建Navigation
  8.     CANavigationController* _viewController = new CANavigationController();
  9.     //创建Navigation的第一个Controller
  10.     FirstViewController* first = new FirstViewController();
  11.       first->init();
  12.     //创建CANavigationBarItem并设置显示标题
  13.     CANavigationBarItem* nItem = CANavigationBarItem::create("First");
  14.     //创建左边按钮(右边按钮同理)
  15.     CABarButtonItem* leftBtn = CABarButtonItem::create("", CAImage::create("source_material/btn_left_white.png"), CAImage::create("source_material/btn_left_blue.png"));
  16.     //将leftBtn添加到CANavigationBarItem
  17.     nItem->addLeftButtonItem(leftBtn);
  18.     //将CANavigationBarItem添加到FirstViewController
  19.     first->setNavigationBarItem(nItem);
  20.     //使用一个controller初始化Navigation(必须)
  21.     //CABarVerticalAlignmentBottom显示在底部
  22.     _viewController->initWithRootViewController(first,CABarVerticalAlignmentBottom);
  23.     //RootWindow加载Navigation
  24.     this->setRootViewController(_viewController);
  25.     //释放内存
  26.     first->release();
  27.     //释放内存
  28.     _viewController->release();
  29.     return true;
  30. }
复制代码


主要了解:CABarButtonItem这个类的样式

  1. //根据title创建CANavigationBarItem
  2. static CANavigationBarItem* create(const std::string& title);
  3. //添加左边按钮
  4. void addLeftButtonItem(CABarButtonItem* item);
  5. //添加邮编按钮
  6. void addRightButtonItem(CABarButtonItem* item);
复制代码


管理
初始化

  1. virtual bool initWithRootViewController(CAViewController* viewController,CABarVerticalAlignment var = CABarVerticalAlignmentTop);
复制代码


替换

  1. virtual void replaceViewController(CAViewController* viewController, bool animated);
复制代码


增加

  1. virtual void pushViewController(CAViewController* viewController, bool animated);
复制代码


移除

  1.     /*
  2.     *移除栈顶的viewController
  3.     *animated:是否播放动画
  4.     */
  5.     CAViewController* popViewControllerAnimated(bool animated);

  6.     /*
  7.     *移除根的viewController
  8.     *animated:是否播放动画
  9.     */
  10.     void popToRootViewControllerAnimated(bool animated);
  11.     /*
  12.     *移除第一个viewController
  13.     *animated:是否播放动画
  14.     */
  15.     CAViewController* popFirstViewController();

  16.     /*
  17.     *根据索引值移除viewController
  18.     *animated:是否播放动画
  19.     */
  20.     CAViewController* popViewControllerAtIndex(int index);
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

推荐阅读 More>

© 2001-2015 9秒社团

合作伙伴

公司简介 | 联系方式
COPYRIGHT©2015 ZHONGQINGLONGTU NETWORK CO.LTD ALL RIGHTS RESERVED.ICP备11023195号-4
北京中清龙图网络技术有限公司
返回顶部 返回列表