关于如何实现双击某一个tabBarItem,自动进行下拉刷新的问题,自己在今天开发项目的过程中遇到了这么一个问题,就是不仅仅通过向下拉来实现下拉刷新,也可以通过双击那个tabBarItem达到目的。自己在网上百度了一下,发现网上没有之类的问题,可能是问题太过于简单,所以大神们都没有屑于贴出来。所以我就自己动手解决了这么一个问题。
首先,我的tabBar总共控制着4个主viewController,我的MainViewController是继承于tabBarController的,所以我在.h文件中实现了UITabBarDelegate,然后在.m文件中实现delegate方法,实现的代码如下:
#pragma mark - UITabBar delegate 实现双击tabBar刷新
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
if (self.selectedIndex == 1 && self.selectedIndex == item.tag ) {
UINavigationController *nav = self.viewControllers[1];
StudentViewController *studentViewCtrl = nav.viewControllers[0];
[studentViewCtrl refreshUI];
}
self.selectedIndex = item.tag;
}
-----------------------------------下面都是对上述代码的相关解释----------------------------------------
1、item的tag是之前就设置好的,在4个主的viewController里面,我将每一个的ctrl设置了tag值,然后放入array中,才传入了继承于tabBarController的MainViewController中的。代码如下:
- (void)_initViewCtrls
{
HomeViewController *homeViewCtrl = [[HomeViewController alloc] init];
UITabBarItem *homeItem = [[UITabBarItem alloc] initWithTitle:@"首页" image:[UIImage imageNamed:@"tabbar_home.png"] tag:0];
homeViewCtrl.tabBarItem = homeItem;
StudentViewController *stuViewCtrl = [[StudentViewController alloc] init];
UITabBarItem *stuItem = [[UITabBarItem alloc] initWithTitle:@"校内新闻" image:[UIImage imageNamed:@"tabbar_message_center.png"] tag:1];
stuViewCtrl.tabBarItem = stuItem;
MeViewController *meViewCtrl = [[MeViewController alloc] init];
UITabBarItem *meItem = [[UITabBarItem alloc] initWithTitle:@"我的" image:[UIImage imageNamed:@"tabbar_profile.png"] tag:2];
meViewCtrl.tabBarItem = meItem;
MoreViewController *moreViewCtrl = [[MoreViewController alloc] init];
UITabBarItem *moreItem = [[UITabBarItem alloc] initWithTitle:@"更多" image:[UIImage imageNamed:@"tabbar_more.png"] tag:3];
moreViewCtrl.tabBarItem = moreItem;
NSArray *viewCtrlArray = [NSArray arrayWithObjects:homeViewCtrl,stuViewCtrl,meViewCtrl,moreViewCtrl, nil];
NSMutableArray *array = [NSMutableArray arrayWithCapacity:4];
for (UIViewController *viewCtrl in viewCtrlArray) {
BaseNaviViewController *baseNav = [[BaseNaviViewController alloc] initWithRootViewController:viewCtrl];
baseNav.delegate = self;
[array addObject:baseNav];
[baseNav release];
}
self.viewControllers = array;
[homeViewCtrl release];
[stuViewCtrl release];
[meViewCtrl release];
[moreViewCtrl release];
[homeItem release];
[stuItem release];
[meItem release];
[moreItem release];
}
2、[studentViewCtrl refreshUI]是我在StudentViewController中对外公布的一个方法,这样就可以实现MainViewController和StudentViewController的一个通信,让数据请求的都在StudentViewController中完成。具体的方法如下代码:
#pragma mark - data
// 自动下拉刷新,该方法提供给MainViewCtrl
- (void)refreshUI
{
[self.tableView headerBeginRefreshing];
[self loadData];
}
3、再啰嗦两句,我的下拉刷新控件用的是MJRefresh,这个控件在code4App上面有,非常的好用,耦合度非常低,达到了“随需随插”的境界。