众所周知,刷新在我们的应用中使用频率是很高的,一般的应用也不只是一个界面需要我们来进行刷新操作,所以今天所讲的刷新的地位就不言而喻了。
首先我们要明确使用这个功能的场景,我们需要在很多的页面里使用,难道我们要在不同的页面里不断的复制粘贴我们的相同代码吗?不是的,作为一个有经验的程序员,她会这么做:继承。
那么我们要继承谁呢?MJRefresh,提供了类的继承图。在这里不得不说:明杰欧巴,爱你么么哒。
在这里我们看到MJRefreshNormalHeader和MJRefreshGifHeader,第一个类是我们的普通刷新类,第二个类是在普通刷新类上加了gif动态图,这里我们要继承的是第一个类MJRefreshNormalHeader。
- (void)prepare;是父类的方法,要继承MJRefreshNormalHeader,就要实现这个方法,并且[super prepare];
明杰欧巴写的刷新的控件是可以根据具体需求改变的,像是上方加个你公司的Logo。
代码示例:
- (void)prepare
{
[super prepare];
self.automaticallyChangeAlpha = YES;
self.lastUpdatedTimeLabel.textColor = [UIColor orangeColor];
self.stateLabel.textColor = [UIColor orangeColor];
[self setTitle:@"赶紧下拉吧" forState:MJRefreshStateIdle];
[self setTitle:@"赶紧松开吧" forState:MJRefreshStatePulling];
[self setTitle:@"正在加载数据..." forState:MJRefreshStateRefreshing];
[self addSubview:[[UISwitch alloc] init]];
UIImageView *logo = [[UIImageView alloc] init];
logo.image = [UIImage imageNamed:@"bd_logo1"];
[self addSubview:logo];
self.logo = logo;
}
/**
* 摆放子控件
*/
- (void)placeSubviews
{
[super placeSubviews];
self.logo.xmg_width = self.xmg_width;
self.logo.xmg_height = 50;
self.logo.xmg_x = 0;
self.logo.xmg_y = - 50;
}
写好继承类以后,该如何使用呢?那么就简单了。总共分三步:
第一步:把冰箱门打开。导入刚刚类的头文件。
第二部:把大象装进去。使用MJRefreshHeader的类方法,headerWithRefreshingTarget:refreshingAction:此方法可以让你在刷新时候执行另一个方法,一般在此方法中加载后台的数据,值得注意的是,在加载数据之后无论加载成功或是失败都需要在此结束刷新,如不刷新,则刷新不会结束。
[self.tableView.mj_header endRefreshing];
如果要应用一进来页面就开始刷新,则加上这一句:
[self.tableView.mj_header beginRefreshing];
代码示例:
- (void)setupRefresh
{
self.tableView.mj_header = [SUNRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];
[self.tableView.mj_header beginRefreshing];
}
第三部:把冰箱门关上。没有了。
下拉刷新和上拉类似,最好都写成继承的类,根据需求继承MJRefreshAutoNormalFooter或者是MJRefreshBackNormalFooter。这里需要提到的是两个属性。
triggerAutomaticallyRefreshPercent用来设置刷新控件出现的百分比到多少时候,开始刷新。
automaticallyRefresh用来设置控件是否要自动刷新。
代码示例:
self.triggerAutomaticallyRefreshPercent = 0.5;
self.automaticallyRefresh = NO;