ios 小知识集锦

//获取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

{

    //手机号以131514718开头,八个 \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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值