//获取Documents下文件的路径
+ (NSString *)pathOfDocument:(NSString *)fileName {
NSString *p = [NSString stringWithFormat:@"Documents/%@",fileName];
NSString *homePath = NSHomeDirectory(); //获取沙盒的根路径
NSString *path = [homePath stringByAppendingPathComponent:p];
return path;
}
//删除指定路径的文件
+ (BOOL)deleteFile:(NSString *)path {
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
return [fileManager removeItemAtPath:path error:nil];
}
return NO;
}
//计算字体占据空间的大小
//不同的ios版本,调用不同的方法,实现相同的功能
+(CGSize)sizeOfStr:(NSString *)str andFont:(UIFont *)font andMaxSize:(CGSize)size andLineBreakMode:(NSLineBreakMode)mode
{
CGSize s;
if ([[[UIDevice currentDevice]systemVersion]doubleValue]>=7.0) {
NSMutableDictionary *mdic=[NSMutableDictionary dictionary];
[mdic setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName];
[mdic setObject:font forKey:NSFontAttributeName];
s = [str boundingRectWithSize:size options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:mdic context:nil].size;
}
else
{
s=[str sizeWithFont:font constrainedToSize:size lineBreakMode:mode];
}
return s;
}
//获取documents下的文件路径
+ (NSString *)getDocumentsPath:(NSString *)fileName {
//两种获取document路径的方式
// NSString *documents = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *path = [documents stringByAppendingPathComponent:fileName];
return path;
}
// date 格式化为 string
+ (NSString*) stringFromFomate:(NSDate*) date formate:(NSString*)formate {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:formate];
NSString *str = [formatter stringFromDate:date];
return str;
}
#pragma remark -日期固定格式转换
+ (NSDate *) dateFromFomate:(NSString *)datestring formate:(NSString*)formate {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:formate];
NSDate *date = [formatter dateFromString:datestring];
return date;
}
// 时间string 格式化为 指定格式
+ (NSString *)fomateString:(NSString *)datestring {
NSString *formate = @"E MMM d HH:mm:ss Z yyyy";
NSDate *createDate = [UIUtils dateFromFomate:datestring formate:formate];
NSString *text = [UIUtils stringFromFomate:createDate formate:@"MM-dd HH:mm"];
return text;
}
#pragma remark -视图切换 动画
+(void) animationWithButton:(UIView *)posterView listView:(UIView *)listView supView:(UIView *)supView{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[supView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
if (posterView.hidden) {
posterView.hidden = NO;
listView.hidden = YES;
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:supView cache:YES];
}else{
posterView.hidden = YES;
listView.hidden = NO;
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:supView cache:YES];
}
[UIView commitAnimations];
}
#pragma remark -(显示MBProgressHUD)需要配合第三方框架MBProgressHUD使用
+(void) showHUD:(NSString *)title withView:(UIView *)view{
[MBProgressHUD showHUDAddedTo:view animated:YES].labelText = title;
}
#pragma remark -(显示MBProgressHUD一定时间自动隐藏)需要配合第三方框架MBProgressHUD使用
+(void) showFinishHUD:(NSString *)title toView:(UIView *)view isSuccess:(BOOL) isSuc
{
if (isSuc) {
[MBProgressHUD showSuccessWithText:title toView:view];
}else{
[MBProgressHUD showErrorWithText:title toView:view];
}
}
#pragma remark -(隐藏MBProgressHUD)需要配合第三方框架MBProgressHUD使用
+(void) hideHUDForView:(UIView *)view
{
[MBProgressHUD hideHUDForView:view animated:YES];
}
//获取网络状态
+(NetWorkStatus) isConnectionAvailable{
NetWorkStatus status;
Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
if ([reach currentReachabilityStatus] == NotReachable) {
status = NetWorkNotReachable;
}else if ([reach currentReachabilityStatus] == ReachableViaWiFi){
status = NetWorkIsWIFI;
}else if ([reach currentReachabilityStatus] == ReachableViaWWAN){
status = NetWorkIs3G;
}
return status;
}
//等比缩放图片
+(UIImage *) imageScaleWithImage:(UIImage *)sourceImage andSize:(CGSize)size{
//size 为CGSize类型,即你所需要的图片尺寸
UIGraphicsBeginImageContext(size);
//指定了图片绘制区域
[sourceImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
/*邮箱验证 MODIFIED BY HELENSONG*/
+(BOOL)isValidateEmail:(NSString *)email
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
/*手机号码验证 MODIFIED BY HELENSONG*/
+(BOOL) isValidateMobile:(NSString *)mobile
{
//手机号以13,15,147,18开头,八个 \d 数字字符
NSString *phoneRegex = @"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
// NSLog(@"phoneTest is %@",phoneTest);
return [phoneTest evaluateWithObject:mobile];
}
#pragma remark -设置消息数量
+(void)showBadgeValue:(NSString *)strBadgeValue andUIView :(UIView *)view
{
for (UIView *subview in view.subviews) {
NSString *strClassName = [NSString stringWithUTF8String:object_getClassName(subview)];
if ([strClassName isEqualToString:@"UITabBarButtonBadge"] ||
[strClassName isEqualToString:@"_UIBadgeView"]) {
[subview removeFromSuperview];
break;
}
}
if ([strBadgeValue intValue] > 0) {
UITabBar *tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
UITabBarItem *item =[[UITabBarItem alloc] initWithTitle:@"" image:nil tag:0];
item.badgeValue = strBadgeValue;
NSArray *array = [[NSArray alloc] initWithObjects:item, nil];
tabBar.items = array;
//寻找
for (UIView *viewTab in tabBar.subviews) {
for (UIView *subview in viewTab.subviews) {
NSString *strClassName = [NSString stringWithUTF8String:object_getClassName(subview)];
if ([strClassName isEqualToString:@"UITabBarButtonBadge"] ||
[strClassName isEqualToString:@"_UIBadgeView"]) {
//从原视图上移除
[subview removeFromSuperview];
[view addSubview:subview];
subview.frame = CGRectMake(view.frame.size.width-subview.frame.size.width, 0,
subview.frame.size.width, subview.frame.size.height);
}
}
}
}
}
#pragma remark -移除消息数量
+(void)removeBadgeValue:(UIView *)view
{
//
for (UIView *subview in view.subviews) {
NSString *strClassName = [NSString stringWithUTF8String:object_getClassName(subview)];
if ([strClassName isEqualToString:@"UITabBarButtonBadge"] ||
[strClassName isEqualToString:@"_UIBadgeView"]) {
[subview removeFromSuperview];
break;
}
}
}
#pragma remark -获取本地沙盒目录下的文件
+(NSData *)getDocumentData:(NSString *)fileName{
NSString *path =[[self class] getDocumentsPath:fileName];
NSData *data =nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
data =[fileManager contentsAtPath:path];
}
return data;
}
#pragma remark -写入文件到本地
+(void)WriteDocumentData:(NSString *)fileUrl{
[QFHTTPManager requestWithUrl:fileUrl Finish:^(NSData *data) {
NSString *name = [fileUrl lastPathComponent];
NSString *path =[[self class] getDocumentsPath:name];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
[fileManager removeItemAtPath:path error:nil];
}
[data writeToFile:path atomically:YES];
} Failed:^(NSError *error) {
}];
}
#pragma remark -个性化时间显示
+(NSString *)findendliyTime:(NSString *)dataTime{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//设置格式 年yyyy 月 MM 日dd 小时hh(HH) 分钟 mm 秒 ss MMM单月 eee周几 eeee星期几 a上午下午
//与字符串保持一致
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//现在的时间转换成字符串
NSDate * nowDate = [NSDate date];
NSString * noewTime = [formatter stringFromDate:nowDate];
//参数字符串转化成时间格式
NSDate * date = [formatter dateFromString:dataTime];
//参数时间距现在的时间差
NSTimeInterval time = -[date timeIntervalSinceNow];
//上述时间差输出不同信息
if (time < 60) {
return @"刚刚";
}else if (time <3600){
int minute = time/60;
NSString * minuteStr = [NSString stringWithFormat:@"%d分钟前",minute];
return minuteStr;
}else {
//如果年不同输出某年某月某日
if ([[dataTime substringToIndex:4] isEqualToString:[noewTime substringToIndex:4]]) {
//截取字符串从下标为5开始 2个
NSRange rangeM = NSMakeRange(5, 2);
//如果月份不同输出某月某日某时
if ([[dataTime substringWithRange:rangeM]isEqualToString:[noewTime substringWithRange:rangeM]]) {
NSRange rangD = NSMakeRange(8, 2);
//如果日期不同输出某日某时
if ([[dataTime substringWithRange:rangD]isEqualToString:[noewTime substringWithRange:rangD]]) {
NSRange rangeSSD = NSMakeRange(11, 5);
NSString * Rstr = [NSString stringWithFormat:@"今日%@",[dataTime substringWithRange:rangeSSD]];
return Rstr;
}else{
NSRange rangSD = NSMakeRange(5, 5);
return [dataTime substringWithRange:rangSD];
}
}else{
NSRange rangeSM = NSMakeRange(5,5);
return [dataTime substringWithRange:rangeSM];
}
}else{
return [dataTime substringToIndex:10];
}
}
}
#pragma remark -时间比较
+(BOOL)CompareTime:(NSString *)nowTime andNextTime:(NSString *)nextTime{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//设置格式 年yyyy 月 MM 日dd 小时hh(HH) 分钟 mm 秒 ss MMM单月 eee周几 eeee星期几 a上午下午
//与字符串保持一致
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//现在的时间转换成字符串
NSDate * nextDate = [NSDate date];
if (nextTime) {
nextDate = [formatter dateFromString:nextTime];
}
//参数字符串转化成时间格式
NSDate * date = [formatter dateFromString:nowTime];
//参数时间距现在的时间差
NSTimeInterval time = -[date timeIntervalSinceDate:nextDate];
//上述时间差输出不同信息
if (time < 60) {
return NO;
}
return YES;
}
#pragma remark -tableView 空余部分 不显示 分割线
+(void)setExtraCellLineHidden: (UITableView *)tableView
{
UIView *view = [UIView new];
view.backgroundColor = [UIColor clearColor];
[tableView setTableFooterView:view];
}
#pragma remark -json字符串转Dic
+(id)JSONValue:(NSString *)jsonStr
{
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\r\n" withString:@""];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\t" withString:@""];
NSData* data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
__autoreleasing NSError* error = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
#pragma remark -md5 加密
+(NSString *) md5: (NSString *) inPutText
{
const char *cStr = [inPutText UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr, strlen(cStr), result);
return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
] lowercaseString];
}
#pragma remark - 将JSON串转化为字典或者数组
+(id)toArrayOrNSDictionary:(NSData *)jsonData{
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject != nil && error == nil){
return jsonObject;
}else{
// 解析错误
return nil;
}
}
// 将字典或者数组转化为JSON串
+(NSData *)toJSONData:(id)theData{
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData
options:NSJSONWritingPrettyPrinted
error:&error];
if ([jsonData length] && error == nil){
return jsonData;
}else{
return nil;
}
}
#pragma remark -转化NSString
+(NSString *)formateToString:(id)value
{
return [NSString stringWithFormat:@"%@",value];
}
#pragma remark -获取随机颜色
+(UIColor *) randomColor
{
CGFloat hue = ( arc4random() % 256 / 256.0 ); //0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0,away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; //0.5 to 1.0,away from black
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}
#pragma remark -tableviewCell 上级控制器
+(UIViewController *)viewController:(UIView *)view
{
UIResponder *next = [view nextResponder];
do {
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = [next nextResponder];
} while (next != nil);
return nil;
}