在这个项目中,学习本地json文件的获取、collectionView和tabvleView的使用、KVO的使用等知识点
可以实现的效果是可以左右滑动也可以上下滑动,当在搜索框中输入文字点击return键时调到搜索界面,也可以点击其中的某一个cell跳到清单界面(未实现);点击下面的tabbar中的按钮可以切换界面。在这里我主要实现的是首页的功能,其他界面的功能将在后续中继续完成。
实现的过程主要是在ViewController上面首先创建一个标题栏的collectionView用来显示标题,下面的主要视图也是用collectionViewController来实现左右滑动.然后在collectionView中添加tableView来实现上下的滑动.
对导航栏中中的搜索框添加代理方法来监听当输入完成点击了return键后直接跳转到搜索界面。
给头部的collectionView和mainCollectionView分别添加KVO来监听滑动的范围,让头部视图和下面的视图一起滑动。
实现后的显示:
实现的主要代码为:
tabbarControl的实现代码:
#import "BaseTabbarController.h"
#import "Common.h"
@interface BaseTabbarController ()
@end
@implementation BaseTabbarController
- (void)viewDidLoad {
[super viewDidLoad];
[self creatTabbar];
}
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self removeTabbar];
}
#pragma mark - 移除自带的tabbar
- (void) removeTabbar {
for (UIView *view in self.tabBar.subviews) {
if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[view removeFromSuperview];
}
}
}
#pragma mark - creat self tabbar
- (void) creatTabbar {
//设置背景图片
UIImageView *tabbarImage= [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kWidth,TabBarHeight)];
tabbarImage.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tabBarViewBg"]];
// [self.tabBar addSubview:tabbarImage];
// self.tabBar.backgroundColor = [UIColor yellowColor];
self.tabBar.userInteractionEnabled = YES;
//创建数组来存数需要的图片
NSArray *normal = @[@"Home_normal",@"Message_normal",@"Show_normal",@"Square_normal",@"PersonCenter_normal"];
NSArray *selected = @[@"Home_selected",@"Message_selected",@"Show_normal",@"Square_selected",@"PersonCenter_normal"];
//利用for循环来创建item
for (int i = 0; i < normal.count; i++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(i*kWidth/normal.count, 0, kWidth/normal.count, TabBarHeight);
//获取item的名字
// NSString *normal = [NSString stringWithFormat:@"%@",imageArraynormal[i]];
[button setImage:[UIImage imageNamed:normal[i]] forState:UIControlStateNormal];
//获取选中状态
// NSString *selected = [ normal stringByReplacingOccurrencesOfString:@"normal" withString:@"selected"];
[button setImage:[UIImage imageNamed:selected[i]] forState:UIControlStateSelected];
button.tag = 1000 + i;
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[self.tabBar addSubview:button];
//设置默认选中状态
if (button.tag == 1000) {
button.selected = YES;
}
}
}
#pragma mark - button Action
- (void) buttonAction :(UIButton *) button {
NSInteger index = button.tag - 1000;
//切换视图控制器
self.selectedIndex = index;
//修改按钮的选中状态
for (int i = 0; i < self.viewControllers.count; i++) {
UIButton *btn = (UIButton *)[self.tabBar viewWithTag:1000+ i];
btn.selected = NO;
}
button.selected = !button.selected;
}
@end
//封装的获取本地json文件的方法(独立建立一个类来封装)
//创建类方法来获取json数据
+ (id) dataService:(NSString *)resource {
//获取路径
NSString *path = [[NSBundle mainBundle] pathForResource:resource ofType:@"json"];
//封装成data数据
NSData *nsdata = [[NSData alloc] initWithContentsOfFile:path];
//返回id类型的数据
id data = [NSJSONSerialization JSONObjectWithData:nsdata options:NSJSONReadingMutableContainers error:nil];
return data;
}
模型类的基类 (主要功能是将获取到的json数据和模型类连接)
//主要代码的实现
- (NSMutableDictionary *) buildRelationShip:(NSDictionary *) dic {
//取出字典中的所有键
NSArray *keys = [dic allKeys];
//创建一个可变的字典来存储所有的键值对
NSMutableDictionary *munDic = [NSMutableDictionary dictionary];
for (NSString *str in keys) {
if ([str isEqualToString:@"id"]) {
NSString *className = NSStringFromClass([self class]);
NSString *newID = [NSString stringWithFormat:@"%@Id",className];
[munDic setObject:newID forKey:@"id"];
}else {
[munDic setObject:str forKey:str];
}
}
return munDic;
}
//转化为方法
- (SEL) findSettermethod :(NSString *) name {
//1、截取字符串的首字母
NSString *firstLetter = [[name substringToIndex:1] uppercaseString];
//2、截取剩下的字母
NSString *lastLetter = [name substringFromIndex:1];
//3、拼接字符串
NSString *setterName = [NSString stringWithFormat:@"set%@%@",firstLetter,lastLetter];
//4、从一个字符串产生方法
SEL setter = NSSelectorFromString(setterName);
//返回
return setter;
}
- (void) setValueAttributeWithDictionary:(NSDictionary *)keyValue{
//1、获取字典映射
NSMutableDictionary *relationDic = [self buildRelationShip:keyValue];
//2、找到set方法
NSArray *allkeys = [relationDic allKeys];
for (NSString *key in allkeys) {