【iOS】PickerView、DatePicker、Alert

2016-11-10  本文已影响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];
上一篇下一篇

猜你喜欢

热点阅读