美文网首页
【iOS】PickerView、DatePicker、Alert

【iOS】PickerView、DatePicker、Alert

作者: 雨声不吃鱼 | 来源:发表于2016-11-10 17:20 被阅读0次
    pickerView 使用

    一、设置2个代理:

    数据源协议
    pickerView.dataSource = self;

    delegate协议
    pickerView.delegate = self;

    二、2个必须实现的协议方法:

    设置选择器中列数目

    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    

    设置每列的行数目 component 列号,从0开始

    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    

    三、可选的协议方法:

    设置每列、每行的标题 row 行号,从0 开始

    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    

    四、列宽 / 行高 / 行视图

    //列的行高
    -(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
    
    //列的宽度
    -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
    
    //设置某行某列的视图( title 和 view 同时存在的时候,选 view )
    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        
        UILabel * label = [[UILabel alloc]init];
        label.text = [NSString stringWithFormat:@"%d,%d",component,row];
        label.backgroundColor = [UIColor redColor];
        return label;
    }
    
    pickerView 方法
    //获取某列选中行的行号
    int selectedRow = [pickerView selectedRowInComponent:0];
    
    //刷新方法
    [pickerView reloadComponent:1];
            
    //设置选中某行某列
    [pickerView selectRow:0 inComponent:1 animated:YES];
    
    datePicker(父类是UIControl)
    //1. 设置显示模式
    datePicker.datePickerMode = UIDatePickerModeDateAndTime;
    
    //2. 设置方法
    [datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
    
    /**
        G 年代标志符
        y 年
        M 月
        d 日
        h 时 在上午或下午 (1~12)
        H 时 在一天中 (0~23)
        m 分
        s 秒
        S 毫秒
        E 星期
        D 一年中的第几天
        F 一月中第几个星期几
        w 一年中第几个星期
        W 一月中第几个星期
        a 上午 / 下午 标记符 
        k 时 在一天中 (1~24)
        K 时 在上午或下午 (0~11)
        z 时区
        */
    
    // 字符串 =====> 日期
    NSString * dateStr = @"2015 01 01";
    
    //日期格式化器
    NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
    
    //设置一下转化格式 ;年:year 月:month 日:day 
    [formatter setDateFormat:@"yyyy MM dd"];
        
    NSDate * date = [formatter dateFromString:dateStr];
    
    datePicker.date = date;
    
    
    //日期 =====> 字符串
    //获取选中的日期
    NSDate * date = picker.date ;
        
    //创建日期格式化器
    NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
    
    //时间格式转换为中文
    [datePicker setLocale:[NSLocale localeWithLocaleIdentifier:@"zh_Hans_CN"]];
    
    //设置格式
    [formatter setDateFormat:@"yyyy年MM月dd日 hh:mm:ss  eee"];
        
    //转化
    NSString * dateStr = [formatter stringFromDate:date];
    
    OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天)
    -(NSString *)distanceTimeWithBeforeTime:(double)beTime
    {
        NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
        NSTimeInterval a=[dat timeIntervalSince1970]*1000;
        double distanceTime = a - beTime;
        NSString * distanceStr;
        
        NSDate * beDate = [NSDate dateWithTimeIntervalSince1970:beTime];
        NSDateFormatter * df = [[NSDateFormatter alloc]init];
        [df setDateFormat:@"HH:mm"];
        NSString * timeStr = [df stringFromDate:beDate];
        
        [df setDateFormat:@"dd"];
        NSString * nowDay = [df stringFromDate:[NSDate date]];
        NSString * lastDay = [df stringFromDate:beDate];
        
        if (distanceTime < 60)
        {
            //小于一分钟
            distanceStr = @"刚刚";
        }
        else if (distanceTime <60*60)
        {
            //时间小于一个小时
            distanceStr = [NSString stringWithFormat:@"%ld分钟前",(long)distanceTime/60];
        }
        else if(distanceTime <24*60*60 && [nowDay integerValue] == [lastDay integerValue])
        {
            //时间小于一天
            distanceStr = [NSString stringWithFormat:@"今天 %@",timeStr];
        }
        else if(distanceTime<24*60*60*2 && [nowDay integerValue] != [lastDay integerValue])
        {
            if ([nowDay integerValue] - [lastDay integerValue] ==1 || ([lastDay integerValue] - [nowDay integerValue] > 10 && [nowDay integerValue] == 1))
            {
                distanceStr = [NSString stringWithFormat:@"昨天 %@",timeStr];
            }
            else
            {
                [df setDateFormat:@"MM-dd HH:mm"];
                distanceStr = [df stringFromDate:beDate];
            }
        }
        else if(distanceTime <24*60*60*365)
        {
            [df setDateFormat:@"MM-dd HH:mm"];
            distanceStr = [df stringFromDate:beDate];
        }
        else
        {
            [df setDateFormat:@"yyyy-MM-dd HH:mm"];
            distanceStr = [df stringFromDate:beDate];
        }
        
        return distanceStr;
    }
    

    2016-11-28 更新

    今天APP审核又被拒了,原因是苹果对我们的APP进行抓包,发现有网络开关,所以这就尴尬了...
    百度了一下,有好多方式实现热更新:

    1. React Native
    2. JSPatch
    3. Lua
      ...
      但是这些操作起来有些麻烦,而且我也不是太懂...所以想到了一个最笨最简单的方式。用时间判断✌️
        //开关 关闭日期 (正常时间 = 设置时间 - 8小时)    
        #define OPEN_CLOSE_DATE @"2016-12-04 08:00:00"
       
        //当前时间的时间戳
        NSTimeInterval curTime = [[NSDate date] timeIntervalSince1970];
        NSString * curTimeStr = [NSString stringWithFormat:@"%f",curTime];
        NSLog(@"\n -- 当前时间戳:%@",curTimeStr);
        float curTimeNum = [curTimeStr floatValue];
        
        //设置的时间 -> 时间戳
        NSString * openTime = OPEN_CLOSE_DATE; //时间
        NSDateFormatter * formr = [[NSDateFormatter alloc]init];
        [formr setDateStyle:NSDateFormatterMediumStyle];
        [formr setTimeStyle:NSDateFormatterShortStyle];
        [formr setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
        NSDate * openDate = [formr dateFromString:openTime];
        NSString * setTimeStr = [NSString stringWithFormat:@"%f", (float)[openDate timeIntervalSince1970]];
        NSLog(@"\n -- 设置时间戳:%@",setTimeStr);
        float setTimeNum = [setTimeStr floatValue];
    
        if (curTimeNum >= setTimeNum)
        {
            NSLog(@"屏蔽关闭");
        }
        else
        {
            NSLog(@"屏蔽关闭");
        }
    

    这样就OK了,把APP设置为手动发布,虽然影响了上架时间,但是还是比较不错的选择,毕竟省去了服务器嘛~

    UIAlertController
    UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请打开客户端" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction * actionConfirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
    [alert addAction:actionConfirm];
    [self presentViewController:alert animated:YES completion:nil];
    

    相关文章

      网友评论

          本文标题:【iOS】PickerView、DatePicker、Alert

          本文链接:https://www.haomeiwen.com/subject/qpsxpttx.html