ios 小知识集锦
来源:互联网 发布:视频制作软件图标 编辑:程序博客网 时间:2024/05/12 09:01
//获取Documents下文件的路径
+ (NSString *)pathOfDocument:(NSString *)fileName {
NSString *p = [NSStringstringWithFormat:@"Documents/%@",fileName];
NSString *homePath =NSHomeDirectory(); //获取沙盒的根路径
NSString *path = [homePathstringByAppendingPathComponent:p];
return path;
}
//删除指定路径的文件
+ (BOOL)deleteFile:(NSString *)path {
NSFileManager *fileManager = [NSFileManagerdefaultManager];
if ([fileManagerfileExistsAtPath:path]) {
return [fileManagerremoveItemAtPath:path error:nil];
}
returnNO;
}
//计算字体占据空间的大小
//不同的ios版本,调用不同的方法,实现相同的功能
+(CGSize)sizeOfStr:(NSString *)str andFont:(UIFont *)font andMaxSize:(CGSize)size andLineBreakMode:(NSLineBreakMode)mode
{
CGSize s;
if ([[[UIDevicecurrentDevice]systemVersion]doubleValue]>=7.0) {
NSMutableDictionary *mdic=[NSMutableDictionarydictionary];
[mdic setObject:[UIColorredColor] forKey:NSForegroundColorAttributeName];
[mdic setObject:fontforKey:NSFontAttributeName];
s = [str boundingRectWithSize:sizeoptions:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading
attributes:mdiccontext:nil].size;
}
else
{
s=[str sizeWithFont:fontconstrainedToSize:size lineBreakMode:mode];
}
return s;
}
//获取documents下的文件路径
+ (NSString *)getDocumentsPath:(NSString *)fileName {
//两种获取document路径的方式
// NSString *documents = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documents = [pathsobjectAtIndex:0];
NSString *path = [documentsstringByAppendingPathComponent:fileName];
return path;
}
// date 格式化为 string
+ (NSString*) stringFromFomate:(NSDate*) date formate:(NSString*)formate {
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
[formatter setDateFormat:formate];
NSString *str = [formatterstringFromDate:date];
return str;
}
#pragma remark -日期固定格式转换
+ (NSDate *) dateFromFomate:(NSString *)datestring formate:(NSString*)formate {
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
[formatter setDateFormat:formate];
NSDate *date = [formatterdateFromString:datestring];
return date;
}
// 时间string 格式化为 指定格式
+ (NSString *)fomateString:(NSString *)datestring {
NSString *formate =@"E MMM d HH:mm:ss Z yyyy";
NSDate *createDate = [UIUtilsdateFromFomate:datestring formate:formate];
NSString *text = [UIUtilsstringFromFomate:createDate formate:@"MM-dd HH:mm"];
return text;
}
#pragma remark -视图切换动画
+(void) animationWithButton:(UIView *)posterView listView:(UIView *)listView supView:(UIView *)supView{
[UIViewbeginAnimations:nilcontext:nil];
[UIViewsetAnimationDuration:0.5];
[supView exchangeSubviewAtIndex:0withSubviewAtIndex:1];
if (posterView.hidden) {
posterView.hidden =NO;
listView.hidden =YES;
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:supView cache:YES];
}else{
posterView.hidden =YES;
listView.hidden =NO;
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:supView cache:YES];
}
[UIViewcommitAnimations];
}
#pragma remark -(显示MBProgressHUD)需要配合第三方框架MBProgressHUD使用
+(void) showHUD:(NSString *)title withView:(UIView *)view{
[MBProgressHUDshowHUDAddedTo:view animated:YES].labelText = title;
}
#pragma remark -(显示MBProgressHUD一定时间自动隐藏)需要配合第三方框架MBProgressHUD使用
+(void) showFinishHUD:(NSString *)title toView:(UIView *)view isSuccess:(BOOL) isSuc
{
if (isSuc) {
[MBProgressHUDshowSuccessWithText:title toView:view];
}else{
[MBProgressHUDshowErrorWithText:title toView:view];
}
}
#pragma remark -(隐藏MBProgressHUD)需要配合第三方框架MBProgressHUD使用
+(void) hideHUDForView:(UIView *)view
{
[MBProgressHUDhideHUDForView:view animated:YES];
}
//获取网络状态
+(NetWorkStatus) isConnectionAvailable{
NetWorkStatus status;
Reachability *reach = [ReachabilityreachabilityWithHostName:@"www.baidu.com"];
if ([reachcurrentReachabilityStatus] == NotReachable) {
status = NetWorkNotReachable;
}elseif ([reach currentReachabilityStatus] ==ReachableViaWiFi){
status = NetWorkIsWIFI;
}elseif ([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 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTestevaluateWithObject: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 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",phoneRegex];
// NSLog(@"phoneTest is %@",phoneTest);
return [phoneTestevaluateWithObject:mobile];
}
#pragma remark -设置消息数量
+(void)showBadgeValue:(NSString *)strBadgeValue andUIView :(UIView *)view
{
for (UIView *subviewin view.subviews) {
NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];
if ([strClassNameisEqualToString:@"UITabBarButtonBadge"] ||
[strClassName isEqualToString:@"_UIBadgeView"]) {
[subview removeFromSuperview];
break;
}
}
if ([strBadgeValueintValue] > 0) {
UITabBar *tabBar = [[UITabBaralloc] initWithFrame:CGRectMake(0,0, 320,50)];
UITabBarItem *item =[[UITabBarItemalloc] initWithTitle:@""image:niltag:0];
item.badgeValue = strBadgeValue;
NSArray *array = [[NSArrayalloc] initWithObjects:item,nil];
tabBar.items = array;
//寻找
for (UIView *viewTabin tabBar.subviews) {
for (UIView *subviewin viewTab.subviews) {
NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];
if ([strClassNameisEqualToString:@"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 *subviewin view.subviews) {
NSString *strClassName = [NSStringstringWithUTF8String:object_getClassName(subview)];
if ([strClassNameisEqualToString:@"UITabBarButtonBadge"] ||
[strClassName isEqualToString:@"_UIBadgeView"]) {
[subview removeFromSuperview];
break;
}
}
}
#pragma remark -获取本地沙盒目录下的文件
+(NSData *)getDocumentData:(NSString *)fileName{
NSString *path =[[selfclass] getDocumentsPath:fileName];
NSData *data =nil;
NSFileManager *fileManager = [NSFileManagerdefaultManager];
if ([fileManagerfileExistsAtPath:path]) {
data =[fileManager contentsAtPath:path];
}
return data;
}
#pragma remark -写入文件到本地
+(void)WriteDocumentData:(NSString *)fileUrl{
[QFHTTPManagerrequestWithUrl:fileUrl Finish:^(NSData *data) {
NSString *name = [fileUrllastPathComponent];
NSString *path =[[selfclass] getDocumentsPath:name];
NSFileManager *fileManager = [NSFileManagerdefaultManager];
if ([fileManagerfileExistsAtPath:path]) {
[fileManager removeItemAtPath:patherror:nil];
}
[data writeToFile:pathatomically:YES];
} Failed:^(NSError *error) {
}];
}
#pragma remark -个性化时间显示
+(NSString *)findendliyTime:(NSString *)dataTime{
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
//设置格式年yyyy 月 MM日dd 小时hh(HH)分钟 mm 秒 ss MMM单月 eee周几 eeee星期几 a上午下午
//与字符串保持一致
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//现在的时间转换成字符串
NSDate * nowDate = [NSDatedate];
NSString * noewTime = [formatterstringFromDate:nowDate];
//参数字符串转化成时间格式
NSDate * date = [formatterdateFromString:dataTime];
//参数时间距现在的时间差
NSTimeInterval time = -[datetimeIntervalSinceNow];
//上述时间差输出不同信息
if (time <60) {
return@"刚刚";
}elseif (time <3600){
int minute = time/60;
NSString * minuteStr = [NSStringstringWithFormat:@"%d分钟前",minute];
return minuteStr;
}else {
//如果年不同输出某年某月某日
if ([[dataTimesubstringToIndex:4]isEqualToString:[noewTime substringToIndex:4]]) {
//截取字符串从下标为5开始 2个
NSRange rangeM =NSMakeRange(5,2);
//如果月份不同输出某月某日某时
if ([[dataTimesubstringWithRange:rangeM]isEqualToString:[noewTimesubstringWithRange:rangeM]]) {
NSRange rangD =NSMakeRange(8,2);
//如果日期不同输出某日某时
if ([[dataTimesubstringWithRange:rangD]isEqualToString:[noewTimesubstringWithRange:rangD]]) {
NSRange rangeSSD =NSMakeRange(11,5);
NSString * Rstr = [NSStringstringWithFormat:@"今日%@",[dataTimesubstringWithRange:rangeSSD]];
return Rstr;
}else{
NSRange rangSD =NSMakeRange(5,5);
return [dataTimesubstringWithRange:rangSD];
}
}else{
NSRange rangeSM =NSMakeRange(5,5);
return [dataTimesubstringWithRange:rangeSM];
}
}else{
return [dataTimesubstringToIndex:10];
}
}
}
#pragma remark -时间比较
+(BOOL)CompareTime:(NSString *)nowTime andNextTime:(NSString *)nextTime{
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
//设置格式年yyyy 月 MM日dd 小时hh(HH)分钟 mm 秒 ss MMM单月 eee周几 eeee星期几 a上午下午
//与字符串保持一致
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//现在的时间转换成字符串
NSDate * nextDate = [NSDatedate];
if (nextTime) {
nextDate = [formatter dateFromString:nextTime];
}
//参数字符串转化成时间格式
NSDate * date = [formatterdateFromString:nowTime];
//参数时间距现在的时间差
NSTimeInterval time = -[datetimeIntervalSinceDate:nextDate];
//上述时间差输出不同信息
if (time <60) {
returnNO;
}
returnYES;
}
#pragma remark -tableView 空余部分不显示 分割线
+(void)setExtraCellLineHidden: (UITableView *)tableView
{
UIView *view = [UIViewnew];
view.backgroundColor = [UIColorclearColor];
[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 = [jsonStrdataUsingEncoding:NSUTF8StringEncoding];
__autoreleasingNSError* error = nil;
id result = [NSJSONSerializationJSONObjectWithData:data options:kNilOptionserror:&error];
if (error !=nil) returnnil;
return result;
}
#pragma remark -md5 加密
+(NSString *) md5: (NSString *) inPutText
{
constchar *cStr = [inPutText UTF8String];
unsignedchar result[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr,strlen(cStr), result);
return [[NSStringstringWithFormat:@"%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 = [NSJSONSerializationJSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject !=nil && error == nil){
return jsonObject;
}else{
// 解析错误
returnnil;
}
}
// 将字典或者数组转化为JSON串
+(NSData *)toJSONData:(id)theData{
NSError *error =nil;
NSData *jsonData = [NSJSONSerializationdataWithJSONObject:theData
options:NSJSONWritingPrettyPrinted
error:&error];
if ([jsonDatalength] && error == nil){
return jsonData;
}else{
returnnil;
}
}
#pragma remark -转化NSString
+(NSString *)formateToString:(id)value
{
return [NSStringstringWithFormat:@"%@",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 [UIColorcolorWithHue:hue saturation:saturationbrightness:brightness alpha:1];
}
#pragma remark -tableviewCell 上级控制器
+(UIViewController *)viewController:(UIView *)view
{
UIResponder *next = [viewnextResponder];
do {
if ([nextisKindOfClass:[UIViewControllerclass]]) {
return (UIViewController *)next;
}
next = [next nextResponder];
} while (next !=nil);
returnnil;
}
- ios 小知识集锦
- 小知识集锦
- WPF小知识集锦
- [QT] 小知识集锦
- css 小知识 集锦
- JS 小知识 集锦
- Qt-小知识集锦
- 虚拟主机小知识集锦
- java 小知识集锦
- ubuntu小知识集锦
- css知识小集锦
- WEB小知识学习集锦
- iOS面试小题集锦
- iOS常用小功能集锦
- java学习小知识集锦1
- java学习小知识集锦2
- java学习小知识集锦2
- Asp.net中相关小知识集锦
- mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)
- android 改变ViewPager切换页面时的速度
- 双头
- (基础)C++语法_1
- 菜鸟学Android(六):两种解析思想
- ios 小知识集锦
- oracle命令语句
- TDD-LTE与FDD-LTE区别之双工模式与帧结构
- shiro注解@RequiresPermissions多权限
- struts-menu与velocity
- 头肩顶
- Spring基于annotation的依赖注入实现
- 24 Swap Nodes in Pairs
- Java 网络编程(一)