CAViewController(視圖控制器)

2018-09-08 15:30 更新

類說(shuō)明

CAViewController是CrossApp中MVC中的C(控制器),它的作用是用于CAView的管理、控制視圖及CAViewController之間的通信與協(xié)調(diào)。CAViewController是所有CrossApp中Controller的基類。


基類

CAContentContainer, CAKeypadDelegate


CAViewController 屬性(點(diǎn)擊查看方法介紹)

屬性方法
Title標(biāo)題
NavigationController獲取NavigationController
NavigationBarItem獲取NavigationBarItem
TabBarController獲取TabBarController
TabBarItem獲取TabBarItem


CAViewController 方法(點(diǎn)擊查看方法介紹)

方法說(shuō)明
init初始化
getNibName返回類型的名稱
isViewRunning當(dāng)前View是否再運(yùn)行
setNavigationBarItem設(shè)置CANavigationBarItem屬性
setTabBarItem設(shè)置CATabBarItem屬性
presentModalViewController彈出一個(gè)CAViewController
dismissModalViewController移除CAViewController
isKeypadEnabled設(shè)置監(jiān)聽(tīng)物理返回鍵
setKeypadEnabled設(shè)置監(jiān)聽(tīng)物理返回鍵
getView獲取當(dāng)前CAViewController的View根節(jié)點(diǎn)
nextResponder獲得下個(gè)監(jiān)聽(tīng)者
ccTouchBegan觸摸事件開(kāi)始時(shí)的回調(diào)函數(shù)
ccTouchMoved觸摸事件中觸點(diǎn)移動(dòng)時(shí)的回調(diào)函數(shù)
ccTouchEnded觸摸事件結(jié)束時(shí)的回調(diào)函數(shù)
ccTouchCancelled觸摸非正常結(jié)束時(shí)的回調(diào)函數(shù)。(例如:電話或鎖屏)
viewDidLoad當(dāng)前控制器的view被加載完畢后調(diào)用
viewDidUnload當(dāng)前控制器的view被移除掉時(shí)調(diào)用
viewDidAppear顯示時(shí)被調(diào)用
viewDidDisappear隱藏時(shí)被調(diào)用
reshapeViewRectDidFinish當(dāng)前view被修改大小時(shí)被自動(dòng)調(diào)用
keyBackClickedback鍵響應(yīng)函數(shù)(android平臺(tái))
keyMenuClickedmenu鍵響應(yīng)函數(shù)(android平臺(tái))
addViewFromSuperview將自己添加到根節(jié)點(diǎn)View
removeViewFromSuperview將自己從根節(jié)View點(diǎn)移除


生命周期

viewDidLoad() //第一次被加載時(shí)調(diào)用(僅有一次會(huì)被調(diào)用)

viewDidAppear() //顯示時(shí)被調(diào)用(例如TableController切換到顯示)

viewDidDisappear() //隱藏時(shí)被調(diào)用(例如TableController切換到其他Controller

viewDidUnload() //移除時(shí)被調(diào)用(僅有一次會(huì)被調(diào)用)


注意:

Window直接加載的CAViewController顯示時(shí)不會(huì)調(diào)用viewDidAppear()函數(shù)

CAViewController之間的管理


切換

如果CAViewController是直接被CAWindow所加載的,那么它就可以直接使用presentModalViewController(CAViewController* controller, bool animated);來(lái)跳轉(zhuǎn)到新的CAViewController,或通過(guò)dismissModalViewController(bool animated);對(duì)當(dāng)前的CAViewController關(guān)閉。


嵌套

CAViewController是可以相互嵌套管理的,例如CATableController可以管理多個(gè)其他的CAViewController.


例如:

bool RootWindow::init()
{
    if (!CAWindow::init())
    {
        return false;
    }
     
    CAViewController* controller1 = new CAViewController();
    CAViewController* controller2 = new CAViewController();
    CAViewController* controller3 = new CAViewController();
    CAViewController* controller4 = new CAViewController();
     
    CAVector<CAViewController*> vec;
    vec.pushBack(controller1);
    vec.pushBack(controller2);
    vec.pushBack(controller3);
    vec.pushBack(controller4);
     
    //創(chuàng)建一個(gè)CATabBarController
    CATabBarController* tabBarController = new CATabBarController();
     
    //將CAVector<CAViewController*>添加到CATabBarController
    tabBarController->initWithViewControllers(vec);
     
    //將tabBarController添加到當(dāng)前的Window
    this->setRootViewController(tabBarController);
     
    //釋放內(nèi)存
    controller1->release();
    controller2->release();
    controller3->release();
    controller4->release();
    tabBarController->release();
}


這樣就使用CATabBarController來(lái)管理CAViewController的顯示與隱藏了

CAView的管理

一般我們會(huì)把邏輯代碼寫(xiě)到viewDidLoad()方法中,我回把所要顯示的CAView通過(guò)this->getView()->addSubview(CrossApp::CAView *child);添加到m_pView的子節(jié)點(diǎn)上。


例如:

void CopybookViewController::viewDidLoad()
{
    _winRect = this->getView()->getBounds();
     
    CAImageView* imageView = CAImageView::createWithImage(CAImage::create("r/HelloWorld.png"));
    imageView->setImageViewScaleType(CAImageViewScaleTypeFitImageCrop);
    imageView->setFrame(_winRect);
     
    this->getView()->addSubview(imageView);
}

CAViewController 屬性

 Title

類型:std::string

解釋:標(biāo)題。set/get{}。

    

NavigationController

類型:CANavigationController*

解釋:獲取NavigationController屬性。get{}。


NavigationBarItem

類型:CANavigationBarItem*

解釋:獲取NavigationBarItem屬性。get{}。


TabBarController

類型:CATabBarController*

解釋:獲取TabBarController。get{}。


TabBarItem

類型:CATabBarItem*

解釋:獲取TabBarItem。get{}。


CAViewController 方法

virtual bool init();

返回值:bool

參數(shù):

解釋:初始化,默認(rèn)返回true,如果返回false則初始化失敗


const char* getNibName();

返回值:const char*

參數(shù):

解釋:返回類型的名稱


bool isViewRunning();

返回值:bool

參數(shù):

解釋:當(dāng)前View是否再運(yùn)行


void setNavigationBarItem(CANavigationBarItem* item); 

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CANavigationBarItem*item項(xiàng)目

解釋:設(shè)置CANavigationBarItem屬性(只有被CANavigationController管理才會(huì)顯示)


void setTabBarItem(CATabBarItem* item);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CANavigationBarItem*item項(xiàng)目

解釋:設(shè)置CATabBarItem屬性(只有被CATableController管理才會(huì)顯示)


void presentModalViewController(CAViewController* controller, bool animated);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CAViewController*controller要彈出的CAViewController
boolanimated是否需要彈出動(dòng)畫(huà)

解釋:彈出一個(gè)CAViewController



void dismissModalViewController(bool animated);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
boolanimated是否需要?jiǎng)赢?huà)

解釋:移除CAViewController


virtual bool isKeypadEnabled();

返回值:virtual bool

參數(shù):

解釋:是否監(jiān)聽(tīng)物理返回鍵(android的Back鍵或pc的Esc鍵)


virtual void setKeypadEnabled(bool value);

返回值:virtual void 

參數(shù):

類型
參數(shù)名說(shuō)明
boolvaluetrue允許,false禁止

解釋:設(shè)置是否監(jiān)聽(tīng)物理返回鍵,默認(rèn)為false


 

virtual CAView* getView();

返回值:CAView*

參數(shù):

解釋:當(dāng)前CAViewController的View根節(jié)點(diǎn)


virtual CAResponder* nextResponder();

返回值:CAResponder*

參數(shù):

解釋:獲得下個(gè)監(jiān)聽(tīng)者


virtual bool ccTouchBegan(CATouch *pTouch, CAEvent *pEvent);

返回值:bool

參數(shù):

類型
參數(shù)名說(shuō)明
CATouch*pTouch觸摸傳遞對(duì)象
CAEvent*pEvent此參數(shù)待定

解釋:觸摸事件開(kāi)始時(shí)的回調(diào)函數(shù)

  

virtual void ccTouchMoved(CATouch *pTouch, CAEvent *pEvent);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CATouch*pTouch觸摸傳遞對(duì)象
CAEvent*pEvent此參數(shù)待定

解釋:觸摸事件中觸點(diǎn)移動(dòng)時(shí)的回調(diào)函數(shù)


virtual void ccTouchEnded(CATouch *pTouch, CAEvent *pEvent);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CATouch*pTouch觸摸傳遞對(duì)象
CAEvent*pEvent此參數(shù)待定

解釋:觸摸事件結(jié)束時(shí)的回調(diào)函數(shù)


virtual void ccTouchCancelled(CATouch *pTouch, CAEvent *pEvent);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CATouch*pTouch觸摸傳遞對(duì)象
CAEvent*pEvent此參數(shù)待定

解釋:觸摸非正常結(jié)束時(shí)的回調(diào)函數(shù)。(例如:電話或鎖屏)


virtual void viewDidLoad() {};

返回值:void

參數(shù):

解釋:當(dāng)前控制器的view被加載完畢后調(diào)用


virtual void viewDidUnload() {};

返回值:void

參數(shù):

解釋:當(dāng)前控制器的view被移除掉時(shí)調(diào)用


virtual void viewDidAppear() {};

返回值:void

參數(shù):

解釋:顯示時(shí)被調(diào)用

   

virtual void viewDidDisappear() {};

返回值:void

參數(shù):

解釋:隱藏時(shí)被調(diào)用

   

virtual void reshapeViewRectDidFinish() {};

返回值:void

參數(shù):

解釋:當(dāng)前view被修改大小時(shí)被自動(dòng)調(diào)用


virtual void keyBackClicked() {};

返回值:void

參數(shù):

解釋:back鍵響應(yīng)函數(shù)(android平臺(tái))


virtual void keyMenuClicked() {};

返回值:void

參數(shù):

解釋:menu鍵響應(yīng)函數(shù)(android平臺(tái))


virtual void addViewFromSuperview(CAView* node);

返回值:void

參數(shù):

類型
參數(shù)名說(shuō)明
CAView*node節(jié)點(diǎn)

解釋:將自己添加到根節(jié)點(diǎn)View(例如window,也可是其他View)


virtual void removeViewFromSuperview();

返回值:void

參數(shù):

解釋:將自己從根節(jié)View點(diǎn)移除

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)