zoukankan      html  css  js  c++  java
  • BSBuDeJie_04

    一 段子的下拉

       建立模型

        数字类型的用assign

    /* 当前页码 */
    @property (nonatomic, assign) NSInteger page;

    二 下拉上拉细节处理

     

    三 细节处理

      1 在各种网络之下,page的数值也不同

        

      2 定义全局常量

        .h文件放引用

        .m文件放定义

        command + b 编译一下

    #import <UIKit/UIKit.h>
    
    UIKIT_EXTERN CGFloat const BSTitlesViewH;
    UIKIT_EXTERN CGFloat const BSTitlesViewY;
    #import <UIKit/UIKit.h>
    
    CGFloat const BSTitlesViewH = 35;
    CGFloat const BSTitlesViewY = 64;
        titlesView.height = BSTitlesViewH;
        titlesView.y = BSTitlesViewY;

      3 可以在numberOfRowsInSection中判断刷新控件的初始状态(是否被隐藏)

       self.tableView.mj_footer.hidden = self.topics.count == 0;

    四 cell的基本结构

      1 取消分割线

        //取消分割线
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        self.tableView.backgroundColor = [UIColor clearColor];  

      2 设置图片不要拉伸

      

      3 重写cell的间距

    - (void)setFrame:(CGRect)frame
    {
        static CGFloat margin = 10;
        
        frame.origin.x = margin;
        frame.size.width -= 2 * frame.origin.x;
        frame.size.height -= margin;
        frame.origin.y += margin;
        
        [super setFrame:frame];
    }

      4 在cell中使用Model

    @class BSTopic;
    
    @interface BSTopicCell : UITableViewCell
    
    /* 模型数据 */
    @property (nonatomic, strong) BSTopic *topic;
    
    @end
    - (void)setTopic:(BSTopic *)topic
    {
        _topic = topic;
    }
       cell.topic = self.topics[indexPath.row];

      5 设置cell的背景图片 

    - (void)awakeFromNib
    {
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.image = [UIImage imageNamed:@"mainCellBackground"];
        self.backgroundView = imageView;
    }

       6 利用代理方法设置cell的高度

    # pragma mark - 代理方法
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
     
        return 200;
    }

      

    五  cell的基本数据

      处理按钮的文字

    - (void)setupButtonTitle:(UIButton *)button count:(NSInteger)count placeholder:(NSString *)placeholder
    {
        
        if (count == 0) {
            placeholder = placeholder;
        }else if (count > 10000) {
            placeholder = [NSString stringWithFormat:@"%.1f万", count / 10000.0];
        }else{
            placeholder = [NSString stringWithFormat:@"%zd", count];
        }
        
        [button setTitle:placeholder forState:UIControlStateNormal];
    }

      

      1 处理时间数据

        用服务器返回的时间与当前时间对比

        //当前时间
        NSDate *now = [NSDate date];
        //发帖时间 NSString -> NSDate
        NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
        //设置日期格式(y:年 M:月 d:天 H:小时 m:分钟 s:秒)
        fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        NSDate *create = [fmt dateFromString:topic.create_time];
        
        NSTimeInterval delta = [create timeIntervalSinceDate:now];
        
        NSLog(@"%f",delta);

        

      2 NSCalendar日历类

        2.1 利用NSCalendar来获取NSDate的每一个元素

    //当前时间
        NSDate *now = [NSDate date];
        
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        
        NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];
       NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:now];
       NSInteger day = [calendar component:NSCalendarUnitDay fromDate:now];
       BSLog(@"%zd",year);

        

         2.2

        //当前时间
        NSDate *now = [NSDate date];
        
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        
        NSDateComponents *cmps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:now];
        
        BSLog(@"%zd  %zd  %zd ", cmps.year, cmps.month, cmps.day);

      

      3 比较时间

        NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
        //设置日期格式(y:年 M:月 d:天 H:小时 m:分钟 s:秒)
        fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        
        //当前时间
        NSDate *now = [NSDate date];
        
        NSDate *create = [fmt dateFromString:create_time];
        
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        
        //比较时间
        NSCalendarUnit unit = NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
        NSDateComponents *cmps = [calendar components:unit  fromDate:create toDate:now options:0];
        
        BSLog(@"%@   %@", now, create);
        BSLog(@"%zd %zd %zd %zd %zd %zd", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);

      

      +0000东八区

      4 封装到扩展类中

    #import <Foundation/Foundation.h>
    
    @interface NSDate (BSExtension)
    
    //比较from和self的时间差值
    - (NSDateComponents *)deltaFrom:(NSDate *)from;
    
    @end
    #import "NSDate+BSExtension.h"
    
    @implementation NSDate (BSExtension)
    
    - (NSDateComponents *)deltaFrom:(NSDate *)from
    {
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        
        //比较时间
        NSCalendarUnit unit = NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
        return [calendar components:unit  fromDate:from toDate:self options:0];
    
    }
    
    @end

      

    七 日期处理

    @interface NSDate (BSExtension)
    
    //比较from和self的时间差值
    - (NSDateComponents *)deltaFrom:(NSDate *)from;
    
    //是否为今年
    - (BOOL)isThisYear;
    //是否为今天
    - (BOOL)isToday;
    //是否为昨天
    - (BOOL)isYesteday;
    
    @end
    - (BOOL)isThisYear
    {
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        
        NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
        NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
        
        return nowYear == selfYear;
    }
    
    //- (BOOL)isToday
    //{
    //    //日历
    //    NSCalendar *calendar = [NSCalendar currentCalendar];
    //    
    //    NSCalendarUnit unit = NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay;
    //    NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
    //    NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
    //    
    //    return nowCmps.year == selfCmps.year && nowCmps.month == selfCmps.month && nowCmps.day == selfCmps.day;
    //}
    
    - (BOOL)isToday
    {
        NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
        fmt.dateFormat = @"yyyy-MM-dd";
        
        NSString *nowString = [fmt stringFromDate:[NSDate date]];
        NSString *selfString = [fmt stringFromDate:self];
        
        return [nowString isEqualToString:selfString];
    }
    
    - (BOOL)isYesteday
    {
        NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
        fmt.dateFormat = @"yyyy-MM-dd";
        
        NSDate *nowDate = [fmt dateFromString:[fmt stringFromDate:[NSDate date]]];
        NSDate *selfDate = [fmt dateFromString:[fmt stringFromDate:self]];
        
        //日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSDateComponents *cmps = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:selfDate toDate:nowDate options:0];
        
        return cmps.year == 0 && cmps.month == 0 && cmps.day == 1;
        
    }

      测试:

    八  日期的精确显示

      利用刚才的事件处理方法获得精确的不同的时间处理数据,并显示在cell中

    /*
     今年
        今天
            1分钟内 
                刚刚
            1小时内
                xx分钟前
            其他
                xx小时前
        昨天
            昨天 12:00:00
        其他
            10-10 12:00:00
     非今年
        2016-10-10 12:22:22
     */
    - (NSString *)create_time{
        
        //日期格式化
        NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
        //设置日期格式(y:年 M:月 d:天 H:小时 m:分钟 s:秒)
        fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        NSDate *create = [fmt dateFromString:_create_time];
        
        if (create.isThisYear) {//今年
            if (create.isToday) {//今天
                NSDateComponents *cmps = [[NSDate date] deltaFrom:create];
                if (cmps.hour >= 1) {//时间差距 >= 1小时
                   return [NSString stringWithFormat:@"%zd小时前", cmps.hour];
                }else if(cmps.minute >= 1){//1小时 > 时间差距 >= 1分钟
                    return [NSString stringWithFormat:@"%zd分钟前", cmps.minute];
                }else{//时间差距 < 1分钟
                    return @"刚刚";
                }
            }else if (create.isYesteday){//昨天
                fmt.dateFormat = @"昨天 HH:mm:ss";
                return [fmt stringFromDate:create];
            }else{//其他
                fmt.dateFormat = @"MM-dd HH:mm:ss";
                return [fmt stringFromDate:create];
            }
        }else{//非今年
            return _create_time;
        }
    
    }

          

    九 新浪加V

      1 随机生成二进制数字

        //随机生成的二进制数字
        topic.sina_v = arc4random_uniform(100) % 2;

      2 控制视图是否隐藏(根据服务器返回的值)

        //新浪加V
        self.sinaVView.hidden = !topic.isSina_v;

      3 把服务器返回的int转成bool类型

    /* 是否是新浪加V用户 */
    @property (nonatomic, assign, getter=isSina_v) BOOL sina_v;

      

    十 子控制器重构(变量在父类中的处理)

      1 可以在父类中声明一个方法,然后在子类中实现

    /* 帖子类型(交给子类去实现) */
    - (NSString *)type;
    - (NSString *)type
    {
        return @"29";
    }

      2 将变量作为父类中的一个属性,在调用时直接传入参数

    /* 帖子类型 */
    @property(nonatomic, copy)NSString *type;
        BSTopicViewController *word = [[BSTopicViewController alloc] init];
        word.title = @"段子";
        word.type = @"29";
        [self addChildViewController:word];

      3 将变量类型写成枚举

    typedef enum
    {
        BSTopicTypeAll = 1,
        BSTopicTypePicture = 10,
        BSTopicTypeWord = 29,
        BSTopicTypeVoice = 31,
        BSTopicTypeVideo = 41
        
    } BSTopicType;
    /* 帖子类型 */
    @property(nonatomic, assign) BSTopicType type;
        BSTopicViewController *word = [[BSTopicViewController alloc] init];
        word.title = @"段子";
        word.type = BSTopicTypeWord;
        [self addChildViewController:word];
  • 相关阅读:
    dock 安装部署和初级管理命令
    3 gogs+jenkins 触发远程构建及tomcat管理war包替换
    2 gitlab+jenkins maven自动打包更新
    1 gitlab+jenkins 自动化部署 持续集成
    Day7 面向对象进阶
    Day 6 面向对象初级
    day4 迭代器&生成器&递归&json&正则
    day5 常用模块
    day3 函数
    day2 数据及文件操作
  • 原文地址:https://www.cnblogs.com/roxy/p/6086022.html
Copyright © 2011-2022 走看看