首页 > 代码库 > [寒江孤叶丶的CrossApp之旅_11][入门系列]通过Demo学习CrossApp之SecondViewController篇

[寒江孤叶丶的CrossApp之旅_11][入门系列]通过Demo学习CrossApp之SecondViewController篇

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的CrossApp之旅系列]

博客地址:http://blog.csdn.net/qq446569365

本文章是我在读Demo时候随手写的注释,分享出来供大家交流探讨。如有不对之处欢迎指出!

SecondViewController.h

#ifndef _Second_ViewController_h_
#define _Second_ViewController_h_

#include <iostream>
#include "CrossApp.h"
#include "CrossAppExt.h"
#include "Info.h"

USING_NS_CC_EXT;

using namespace CSJson;
#define NUM 8
class SecondViewController : public CAViewController, CATableViewDelegate, CATableViewDataSource,CAScrollViewDelegate
{   
public:
    //析构函数
	SecondViewController();
	virtual ~SecondViewController();
    
protected:
    //生命周期的回调函数
    void viewDidLoad();
    void viewDidUnload();
	virtual void viewDidAppear();
    //从json中读取数据
	void loadJsonData(void);

public:
    //监听根View(父节点view)的Size变化  如果当前viewController的根view的大小发生变化,则监听此接口就可以获取到变化后的size。
	virtual void reshapeViewRectDidFinish();
    
    //表格项被选中时候产生的回调消息,三个参数分别是  触发事件的table,所点击项目所在的section(可以理解为分区),所点击项目在分区中的第几行
	virtual void tableViewDidSelectRowAtIndexPath(CATableView* table, unsigned int section, unsigned int row);
    //基本同上,只是被选中项目改为取消选中项
	virtual void tableViewDidDeselectRowAtIndexPath(CATableView* table, unsigned int section, unsigned int row);
    //为tableView创建cell,采用复用的方式,当滚动table的时候,会回调这个函数,在这个函数中,设置table中项目的显示数据,有点类似于Android的形式
	virtual CATableViewCell* tableCellAtIndex(CATableView* table, const CCSize& cellSize, unsigned int section, unsigned int row);
    //该函数用于设置每一个Section的头栏内容,三个参数 第一个是回调的是哪个table,第二个是头栏的Size,第三个是哪个section的头栏,
    //这个函数有点类似于上边的tableCellAtIndex
	virtual CAView* tableViewSectionViewForHeaderInSection(CATableView* table, const CCSize& viewSize, unsigned int section);
	//与上边含义相同只不过这个是尾栏的
    virtual CAView* tableViewSectionViewForFooterInSection(CATableView* table, const CCSize& viewSize, unsigned int section);
	//根据Section的编号返回Section中有多少行   这里返回多少行,绘制table时候就会绘制多少行
    virtual unsigned int numberOfRowsInSection(CATableView *table, unsigned int section);
    //table中有多少个Section
	virtual unsigned int numberOfSections(CATableView *table);
    //向table返回 row的高度,可以根据回调时传入的row和section返回不同的值,来设置table中栏目的高度
	virtual unsigned int tableViewHeightForRowAtIndexPath(CATableView* table, unsigned int section, unsigned int row);
    //基本同上,这个是设置头栏的高度
	virtual unsigned int tableViewHeightForHeaderInSection(CATableView* table, unsigned int section);
    //基本同上,设置尾栏的高度
	virtual unsigned int tableViewHeightForFooterInSection(CATableView* table, unsigned int section);
    //CAScrollViewDelegate的回调函数,当用户从上方下拉刷新时候触发
	virtual void scrollViewHeaderBeginRefreshing(CAScrollView* view);
    //基本同上,不过是底部下拉刷新时候触发
	virtual void scrollViewFooterBeginRefreshing(CAScrollView* view);

public:
    //刷新数据的函数 (用于 scrollViewFooterBeginRefreshing 和 scrollViewHeaderBeginRefreshing 触发时候调用他刷新列表) 用户可以在开发时候,将其设置为从网络获取最新数据后回调刷新
	void refreshTableViewData(float interval);
    // Section中有个按钮,点一下展开,点一下关闭,这个是那个按钮的点击回调函数
	void switchCellListInSection(CAControl* btn,CCPoint point);
    //一个不明觉厉的函数,现在已经被废弃了
	void closeCellListInSection(CAControl* btn, CCPoint point);

private:
	CADipSize size;
	CATableView* p_TableView;
    //sect是用于存储每个section中有多少个row 嘛,就是多少行
	int sect[NUM];
    //用于存储数据的
	CADeque<Info*> personList;
    //是否是顶部刷新的flag
	bool isPullUpRefresh;
};
#endif 

SecondViewController.cpp

#include "SecondViewController.h"

#define CAColor_blueStyle ccc4(51,204,255,255)

#define CELL_COUNT 16

//构造函数,将 isPullUpRefresh 设置为true  然后初始化sect中所有数据为CELL_COUNT(就是16),即:将所有section设置为展开状态
SecondViewController::SecondViewController() :
isPullUpRefresh(true)
{
	for (int i = 0; i < NUM; i++)
	{
		sect[i] = CELL_COUNT;
	}
}
//析构函数,清空personList数据
SecondViewController::~SecondViewController()
{
	personList.clear();
}

void SecondViewController::viewDidLoad(void)
{	
	loadJsonData();//初始化显示的数据,这里是从Json读取数据 以显示在table中 建议跟入进去看看

    //创建CAPullToRefreshView 拖动刷新的View,CA真是方便啊……CAPullToRefreshView是view的显示类型,同三种,头、尾和自定义
	CAPullToRefreshView* headerRefreshView = CAPullToRefreshView::create(CAPullToRefreshView::CAPullToRefreshTypeHeader);
	CAPullToRefreshView* footerRefreshView = CAPullToRefreshView::create(CAPullToRefreshView::CAPullToRefreshTypeFooter);
    //创建一个和view大小相同的TableView
	p_TableView = CATableView::createWithFrame(this->getView()->getBounds());
    //将数据类设置为this(因为本身这个类继承自TableViewDataSource )
	p_TableView->setTableViewDataSource(this);
    //将table的触发事件托管类设置为this
	p_TableView->setTableViewDelegate(this);
    //设置为可选模式   还可以设置为多选模式 setAllowsMultipleSelection
	p_TableView->setAllowsSelection(true);
    //设置table的滚动view 的事件托管类(table的滚动显示功能是因为table继承自scrollview)
	p_TableView->setScrollViewDelegate(this);
    //设置头部向下拖动刷新显示的view
	p_TableView->setHeaderRefreshView(headerRefreshView);
    //设置尾部向下拖动刷新显示的view
	p_TableView->setFooterRefreshView(footerRefreshView);
	this->getView()->addSubview(p_TableView);
}

void SecondViewController::viewDidAppear()
{
    //设置上边的那条
	CANavigationBarItem* item = CANavigationBarItem::create("ViewController2");
	this->getTabBarController()->setNavigationBarItem(item);
}

void SecondViewController::loadJsonData()
{
	Reader reader;
	Value value;
	string jsonFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("information.json");
	CCString *jsonData = http://www.mamicode.com/CCString::createWithContentsOfFile(jsonFile.c_str());>

[寒江孤叶丶的CrossApp之旅_11][入门系列]通过Demo学习CrossApp之SecondViewController篇