【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进行抓包,发现有网络开关,所以这就尴尬了...
百度了一下,有好多方式实现热更新:
- React Native
- JSPatch
- 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];