类说明
CAViewController是CrossApp中MVC中的C(控制器),它的作用是用于CAView的管理、控制视图及CAViewController之间的通信与协调。CAViewController是所有CrossApp中Controller的基类。
基类
CAContentContainer, CAKeypadDelegate
CAViewController 属性(点击查看方法介绍)
属性 | 方法 |
Title | 标题 |
NavigationController | 获取NavigationController |
NavigationBarItem | 获取NavigationBarItem |
TabBarController | 获取TabBarController |
TabBarItem | 获取TabBarItem |
CAViewController 方法(点击查看方法介绍)
方法 | 说明 |
init | 初始化 |
getNibName | 返回类型的名称 |
isViewRunning | 当前View是否再运行 |
setNavigationBarItem | 设置CANavigationBarItem属性 |
setTabBarItem | 设置CATabBarItem属性 |
presentModalViewController | 弹出一个CAViewController |
dismissModalViewController | 移除CAViewController |
isKeypadEnabled | 设置监听物理返回键 |
setKeypadEnabled | 设置监听物理返回键 |
getView | 获取当前CAViewController的View根节点 |
nextResponder | 获得下个监听者 |
ccTouchBegan | 触摸事件开始时的回调函数 |
ccTouchMoved | 触摸事件中触点移动时的回调函数 |
ccTouchEnded | 触摸事件结束时的回调函数 |
ccTouchCancelled | 触摸非正常结束时的回调函数。(例如:电话或锁屏) |
viewDidLoad | 当前控制器的view被加载完毕后调用 |
viewDidUnload | 当前控制器的view被移除掉时调用 |
viewDidAppear | 显示时被调用 |
viewDidDisappear | 隐藏时被调用 |
reshapeViewRectDidFinish | 当前view被修改大小时被自动调用 |
keyBackClicked | back键响应函数(android平台) |
keyMenuClicked | menu键响应函数(android平台) |
addViewFromSuperview | 将自己添加到根节点View |
removeViewFromSuperview | 将自己从根节View点移除 |
生命周期
viewDidLoad() //第一次被加载时调用(仅有一次会被调用)
viewDidAppear() //显示时被调用(例如TableController切换到显示)
viewDidDisappear() //隐藏时被调用(例如TableController切换到其他Controller
viewDidUnload() //移除时被调用(仅有一次会被调用)
注意:
Window直接加载的CAViewController显示时不会调用viewDidAppear()函数
CAViewController之间的管理
切换
如果CAViewController是直接被CAWindow所加载的,那么它就可以直接使用presentModalViewController(CAViewController* controller, bool animated);来跳转到新的CAViewController,或通过dismissModalViewController(bool animated);对当前的CAViewController关闭。
嵌套
CAViewController是可以相互嵌套管理的,例如CATableController可以管理多个其他的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);
//创建一个CATabBarController
CATabBarController* tabBarController = new CATabBarController();
//将CAVector<CAViewController*>添加到CATabBarController
tabBarController->initWithViewControllers(vec);
//将tabBarController添加到当前的Window
this->setRootViewController(tabBarController);
//释放内存
controller1->release();
controller2->release();
controller3->release();
controller4->release();
tabBarController->release();
}
这样就使用CATabBarController来管理CAViewController的显示与隐藏了
CAView的管理
一般我们会把逻辑代码写到viewDidLoad()方法中,我回把所要显示的CAView通过this->getView()->addSubview(CrossApp::CAView *child);添加到m_pView的子节点上。
例如:
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 属性
类型:std::string
解释:标题。set/get{}。
类型:CANavigationController*
解释:获取NavigationController属性。get{}。
类型:CANavigationBarItem*
解释:获取NavigationBarItem属性。get{}。
类型:CATabBarController*
解释:获取TabBarController。get{}。
类型:CATabBarItem*
解释:获取TabBarItem。get{}。
CAViewController 方法
返回值:bool
参数:
解释:初始化,默认返回true,如果返回false则初始化失败
返回值:const char*
参数:
解释:返回类型的名称
返回值:bool
参数:
解释:当前View是否再运行
void setNavigationBarItem(CANavigationBarItem* item);
返回值:void
参数:
类型 | 参数名 | 说明 |
CANavigationBarItem* | item | 项目 |
解释:设置CANavigationBarItem属性(只有被CANavigationController管理才会显示)
void setTabBarItem(CATabBarItem* item);
返回值:void
参数:
类型 | 参数名 | 说明 |
CANavigationBarItem* | item | 项目 |
解释:设置CATabBarItem属性(只有被CATableController管理才会显示)
void presentModalViewController(CAViewController* controller, bool animated);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAViewController* | controller | 要弹出的CAViewController |
bool | animated | 是否需要弹出动画 |
解释:弹出一个CAViewController
void dismissModalViewController(bool animated);
返回值:void
参数:
类型 | 参数名 | 说明 |
bool | animated | 是否需要动画 |
解释:移除CAViewController
virtual bool isKeypadEnabled();
返回值:virtual bool
参数:
解释:是否监听物理返回键(android的Back键或pc的Esc键)
virtual void setKeypadEnabled(bool value);
返回值:virtual void
参数:
类型 | 参数名 | 说明 |
bool | value | true允许,false禁止 |
解释:设置是否监听物理返回键,默认为false
返回值:CAView*
参数:
解释:当前CAViewController的View根节点
virtual CAResponder* nextResponder();
返回值:CAResponder*
参数:
解释:获得下个监听者
virtual bool ccTouchBegan(CATouch *pTouch, CAEvent *pEvent);
返回值:bool
参数:
类型 | 参数名 | 说明 |
CATouch | *pTouch | 触摸传递对象 |
CAEvent | *pEvent | 此参数待定 |
解释:触摸事件开始时的回调函数
virtual void ccTouchMoved(CATouch *pTouch, CAEvent *pEvent);
返回值:void
参数:
类型 | 参数名 | 说明 |
CATouch | *pTouch | 触摸传递对象 |
CAEvent | *pEvent | 此参数待定 |
解释:触摸事件中触点移动时的回调函数
virtual void ccTouchEnded(CATouch *pTouch, CAEvent *pEvent);
返回值:void
参数:
类型 | 参数名 | 说明 |
CATouch | *pTouch | 触摸传递对象 |
CAEvent | *pEvent | 此参数待定 |
解释:触摸事件结束时的回调函数
virtual void ccTouchCancelled(CATouch *pTouch, CAEvent *pEvent);
返回值:void
参数:
类型 | 参数名 | 说明 |
CATouch | *pTouch | 触摸传递对象 |
CAEvent | *pEvent | 此参数待定 |
解释:触摸非正常结束时的回调函数。(例如:电话或锁屏)
virtual void viewDidLoad() {};
返回值:void
参数:
解释:当前控制器的view被加载完毕后调用
virtual void viewDidUnload() {};
返回值:void
参数:
解释:当前控制器的view被移除掉时调用
virtual void viewDidAppear() {};
返回值:void
参数:
解释:显示时被调用
virtual void viewDidDisappear() {};
返回值:void
参数:
解释:隐藏时被调用
virtual void reshapeViewRectDidFinish() {};
返回值:void
参数:
解释:当前view被修改大小时被自动调用
virtual void keyBackClicked() {};
返回值:void
参数:
解释:back键响应函数(android平台)
virtual void keyMenuClicked() {};
返回值:void
参数:
解释:menu键响应函数(android平台)
virtual void addViewFromSuperview(CAView* node);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAView* | node | 节点 |
解释:将自己添加到根节点View(例如window,也可是其他View)
virtual void removeViewFromSuperview();
返回值:void
参数:
解释:将自己从根节View点移除