仿半糖App首页的实现

在这个项目中,学习本地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) {
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值