百思不得姐(第七天)

今天把关注界面大致写了一下

偷了个懒,这个界面直接用XIB拉出来的,中间那个九宫格的图片,其实就是一张整图片,这个界面没什么好主意的,只是需要主意一下约束而已,这个不好说,仁者见仁智者见智,每个人的约束都不一样,只要效果有就行了,接下来是点击左上角的第二个界面,如下图

上面这个界面我大致的思路

  • 左边的列表为一个TableView,右边也是一个TableView,2个表视图用XIB约束下即可,然后与代码关联
  • 左边的类别是通过API请求回来的,不是自己写数组写的,那个白线的效果是直接在画XIB的时候就新加一个白色的View在下方
  • 右边的列表的cell中间的横线是先取消掉TableView的分栏效果,然后将cell的高度-1,透视出背景色
  • //设置cell的间距
    - (void)setFrame:(CGRect)frame {
        frame.size.height -= 1;
        [super setFrame:frame];
    }
  • 在刚进这个推荐关注的时候,需要默认选择第一个分类
  • - (void)loadLeftData {
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"a"] = @"category";
        params[@"c"] = @"subscribe";
    
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        [manager GET:urlAPI parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            _leftTabArray = [XHLeftTabModel mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
    
            [_leftTab reloadData];
    
            //默认选种首行,注意要刷新了表格才能设置默认选择
            [_leftTab selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
    
            //让右边的表开始刷新
            [_rightTab.mj_header beginRefreshing];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [SVProgressHUD showErrorWithStatus:@"刷新数据失败"];
        }];
    
    }

    要注意要先刷新表视图,才能设置默认选择项.

  • 在一个页面有2个表视图,判断是哪个TableView,代码如下
  • - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        if (tableView == _leftTab) {
            XHLeftTabCell *cell = [tableView dequeueReusableCellWithIdentifier:leftIdentifier];
            cell.leftTabModel = _leftTabArray[indexPath.row];
            return cell;
        }else {
            XHRightUserCell *cell = [tableView dequeueReusableCellWithIdentifier:rightIdentifier];
            cell.rightUsreModel = [_leftTabArray[_leftTab.indexPathForSelectedRow.row] users][indexPath.row];
            return cell;
        }
    }
  • 关于左边的那个分类表视图,没有像做头部视图那样用算坐标的方法来使红条滑动,而是直接每个cell都有个红条,然后根据selected来判断点击的是哪一个cell,就将其他cell的红条给hidden掉就行了,换背景色也是一样的思路,也是根据selected来换,为了和右边的表视图保持颜色一致,代码如下
  • //根据选中的cell来换颜色和红条
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
        //没被选中的cell红条隐藏
        self.redLine.hidden = !selected;
        //使用三目来设置选中和未被选中的字体颜色
        self.textLabel.textColor = selected ? [UIColor redColor] : [UIColor colorWithRed:80/255.0 green:80/255.0 blue:80/255.0 alpha:1];
    
        UIView *whiteColor = [[UIView alloc]init];
        whiteColor.backgroundColor = [UIColor whiteColor];
    
        UIView *grayColor = [[UIView alloc]init];
        grayColor.backgroundColor = RGB(240, 240, 240);
        //设置背景色,与右边的保持一致
        self.selectedBackgroundView = selected ? whiteColor : grayColor;
    }
时间: 2024-08-06 15:42:38

百思不得姐(第七天)的相关文章

iOS开发——完整项目实战OC篇&百思不得姐第七天

百思不得姐第七天 上午 一:传值方式 谁传值(主动方):谁发通知. 谁传值(主动方):创建Blcok(判断). 谁传值(主动方):创建协议,代理方法. 详细请看: http://www.cnblogs.com/iCocos/p/4659878.html http://www.cnblogs.com/iCocos/p/4550169.html 二:按钮中的文字获取 方法一: 方法二: 将数组的所有path对应的属性取出来,放到一个数组厘面去 三:装逼试判断:三木运算 四:数组不能一边遍历一边删除

百思不得姐数据刷新数据部分(七)

一 刷新功能图和内部计算原理图 1 刷新功能图: 2 内部计算原理图 二 解析步骤 1 分析整个精华模块 2 真实数据请求部分 3 模型 4 先添加尾部刷新控件 5 再添加头部刷新控件 6 处理刷新业务逻辑 7 知识点补充 三 分析模块 1 从一个完整的app中可以看出,在精华模块中处于全部标题的部分数据包括了其它几部分的数据,内部有视频;声音;图片和段子,所以我们只需要将"全部"做好,就能很快的搞定其它模块了. 四 真实数据请求 1 大致步骤: --> 1 查看百思不得姐该部分

iOS开发——完整项目实战OC篇&百思不得姐第十天

百思不得姐第十天 一:设置时间的显示 显示如下 二:MJExtension类型(名字)的指定——映射 1.在模型实中 2.字典转模型中 三:常见问题 问题1:多个对一个 有时候可能会有多个属性对应一个名字的时候我们就需要使用的到数组 问题2:子模型中的名字 问题3:返回复杂的数据(比如在一个字典里面还有一个字典再在里面有一个url数组) 统一处理 四:模型中嵌套模型:数组中存放模型(模型里面有数组数组里面又装着模型) 或者在代理或在一个独立的文件中的load方法中 五:没有注释 没有参与编译 @

iOS开发——完整项目实战OC篇&百思不得姐第六天

百思不得姐第六天 上午 一:使用Xib加载View 一般我们直接在分类里面,因为Xib加载的代码都是一样 二:键盘的两个常见属性 inoutAccessoryView inputView 三:切换系统和自定义键盘的简单使用方式,是不是很变态 根据使用的键盘判断类型并且切换 四:使用动画的方式,其实就是设置切换的时间就可以了 五:特殊需求,直接总定义并且添加View(不使用inoutAccessoryView) 使用通知实现工具条跟着键盘的移动:(上移键盘的高度) 1:改变Y值,上下改变Y值->使

iOS开发——完整项目实战OC篇&百思不得姐第五天

百思不得姐第五天 上午 一:蒙板 tabBarController:addsubViews Window:rootViewController Modal:presentViewController(rootViewController) 二:显示界面不是想要的效果 由于是使用Xib所以默认在ViewDidLoad中的frame是对应Xib的frame:(600,600) 我们如果要实现布局应该在-viewDidLayoutSubViews实现 但是如果真的要在ViewDidLoad里面实现我们

iOS开发——完整项目实战OC篇&百思不得姐第十一天

百思不得姐第十一天 一:模型中没有ID这个属性 为模型增加一个属性ID,设置名字替换 /** id */ @property (nonatomic, copy) NSString *ID; 替换: + (NSDictionary *)replacedKeyFromPropertyName {     return @{@"ID" : @"id"}; } 二:错误的将数组当作字典来用(其实就是没有数据,比如刷新数据已经没有了,或者直接就是0) 通过堆栈定位错误 最后一

iOS开发——完整项目实战OC篇&百思不得姐第四天

iOS开发——完整项目实战OC篇&百思不得姐第四天 上午 一:自定义按钮使用九宫格布局 二:控件不能点击 三:获取用户点击了那个按钮 四:调整按钮内部控件的位置:主流->上下 五:不能直接使用self.navigationController中或者View中获取导航控制器 方法一: 方法二: 六:布局取整 1 // 总行数 2 3 // NSUInteger rows = sqaures.count / maxCols; 4 5 // if (sqaures.count % maxCols)

百思不得姐之"我的"模块功能(六)

一 功能图和知识点 1 功能图部分:(由于网速的原因,网页部分没有加载出来,但是功能完好) 2 该部分能学到的知识点概括: >1 UITableView的使用(简单) >2 UICollectionView的使用 >3 请求数据 >4 模型 >5 自定义cell >6 清除缓存 >7 细节处理 二 确定搭建方式 1 思考: 由整个app运行的效果图来看,是一个tableView,并且需要分组.界面的下半部分可以通过设置footerView来加载collection

iOS开发——完整项目实战OC篇&百思不得姐第九天

百思不得姐第九天 一:点语法 点语法的本质是生成发送消息或者生成setter方法 二:获取手机时间的年和对应时间年是否一样 比如下面常见时间处理 方法1:(需要分别比较年月日) 方法2:(好处就是可以同时随便比较不同年月日) 如果时同一天就需要处理不不同的值 或者 最后一个昨天: 最终日期处理 三:Cell循环利用中,不使用缓存池中获取的cell的内容, 判断对应的类型,根据类型显示或者隐藏 四:新方法 传入字体和规定的矩形框计算,文字的高度 使用如下: 五:禁止每次计算cell高度 1:字典-