Util.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. //
  2. // Util.m
  3. // IBOSS
  4. //
  5. // Created by iHope on 14-6-6.
  6. // Copyright (c) 2017年 沈阳东科云信软件有限公司. All rights reserved.
  7. //
  8. #import "Util.h"
  9. #import "AchiementDepartmentInfoModel.h"
  10. #import "sys/utsname.h"
  11. @implementation Util
  12. + (void)alignLabelWithTop:(UILabel *)label{
  13. CGSize maxSize = CGSizeMake(label.frame.size.width, 999);
  14. label.adjustsFontSizeToFitWidth = NO;
  15. CGSize actualSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];
  16. CGRect rect = label.frame;
  17. rect.size.height = actualSize.height;
  18. label.frame = rect;
  19. }
  20. + (NSString *)positiveFormat:(NSString *)text{
  21. if(!text || [text floatValue] == 0){
  22. return @"¥0.00";
  23. }else{
  24. NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
  25. [numberFormatter setPositiveFormat:@"¥,###.00;"];
  26. return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[text doubleValue]]];
  27. }
  28. return @"";
  29. }
  30. +(NSString*)thousandSeparatorFormat:(NSString *)number
  31. {
  32. if(!number || [number floatValue] == 0){
  33. return @"0.00";
  34. }else{
  35. NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
  36. [numberFormatter setPositiveFormat:@",###.00;"];
  37. return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[number doubleValue]]];
  38. }
  39. return @"";
  40. }
  41. + (NSString*)objectToJson:(id)_obj{
  42. if (_obj == nil) {
  43. return @"";
  44. }
  45. NSError *parseError = nil;
  46. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:_obj options:NSJSONWritingPrettyPrinted error:&parseError];
  47. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  48. }
  49. + (CGFloat)getPhotoCollectionViewHeightWithPhotos:(NSArray *)photos {
  50. //屏幕横向最大装的图片数
  51. double max = (int) ceil(SCREENWIDTH/125);
  52. double count = photos.count;
  53. double row;
  54. if(count > max){
  55. double c = fmod (count,max);
  56. if(c>0){
  57. row = (count - c)/max + 1;
  58. }
  59. else{
  60. row=count/max;
  61. }
  62. return row * 85 + row * 5;
  63. }
  64. else if(count != 0 && count <= max){
  65. return 90;
  66. }
  67. return 0;
  68. }
  69. // 判断电话是否有效
  70. + (BOOL)isValidTelephone:(NSString *)telephone{
  71. /**
  72. * 手机号码
  73. * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,147
  74. * 联通:130,131,132,152,155,156,185,186
  75. * 电信:133,1349,153,180,181,189
  76. */
  77. NSString *mobile = @"^1(3[0-9]|5[0-35-9]|8[012345-9]|47|7[013678])\\d{8}$";
  78. /**
  79. * 大陆地区固话及小灵通 区号和电话之间没有-
  80. * 区号:010,020,021,022,023,024,025,027,028,029
  81. * 号码:七位或八位
  82. */
  83. NSString *phs = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";
  84. NSPredicate *predicatemobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobile];
  85. NSPredicate *predicatephs = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phs];
  86. return [predicatemobile evaluateWithObject:telephone] || [predicatephs evaluateWithObject:telephone];
  87. }
  88. #pragma mark 判断是否为整形
  89. +(BOOL)isPureInt:(NSString*)string{
  90. NSScanner* scan = [NSScanner scannerWithString:string];
  91. int val;
  92. return [scan scanInt:&val] && [scan isAtEnd];
  93. }
  94. + (BOOL)isValidMobilePhone:(NSString *)telephone
  95. {
  96. /**
  97. * 手机号码
  98. * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,147
  99. * 联通:130,131,132,152,155,156,185,186
  100. * 电信:133,1349,153,180,181,189
  101. */
  102. // NSString *mobile = @"^1(3[0-9]|5[0-35-9]|8[0-9]|9[0-9]|47|7[013678])\\d{8}$";
  103. NSString *mobile = @"^1(3[0-9]|5[0-35-9]|8[012345-9]|6[0-9]|47|9[0-9]|7[0-9])\\d{8}$";
  104. NSPredicate *predicatemobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobile];
  105. return [predicatemobile evaluateWithObject:telephone];
  106. }
  107. /**
  108. 从状态栏中获取网络类型,代码如下
  109. @return <#return value description#>
  110. */
  111. + (NSString *) getNetWorkStates{
  112. UIApplication *app = [UIApplication sharedApplication];
  113. NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
  114. NSString *state = [[NSString alloc]init];
  115. int netType = 0;
  116. //获取到网络返回码
  117. for (id child in children) {
  118. if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
  119. //获取到状态栏
  120. netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];
  121. switch (netType) {
  122. case 0:
  123. state = @"无网络";
  124. //无网模式
  125. break;
  126. case 1:
  127. state = @"2G";
  128. break;
  129. case 2:
  130. state = @"3G";
  131. break;
  132. case 3:
  133. state = @"4G";
  134. break;
  135. case 5:
  136. {
  137. state = @"wifi";
  138. break;
  139. default:
  140. break;
  141. }
  142. }
  143. }
  144. //根据状态选择
  145. }
  146. return state;
  147. }
  148. +(NSMutableArray *)findAllParents:(NSArray*) arry minLength:(NSInteger) len{
  149. NSMutableArray *parentsNodeArray=[[NSMutableArray alloc]init];
  150. if(arry !=nil&&arry.count>0){
  151. for (int i=0;i<arry.count;i++){
  152. AchiementDepartmentInfoModel *currentModel= arry[i];
  153. if(currentModel.organizationCode!=nil){
  154. if(currentModel.organizationCode.length==len){
  155. [parentsNodeArray addObject:currentModel];
  156. }
  157. }
  158. }
  159. }
  160. return parentsNodeArray;
  161. }
  162. +(NSInteger)findDepartmentsRootNodeLength:(NSArray*)departmentArray{
  163. NSInteger minSize=0;
  164. if(departmentArray !=nil&&departmentArray.count>0){
  165. AchiementDepartmentInfoModel *minModel= departmentArray[0];
  166. NSString *minCode=minModel.organizationCode;
  167. for(int i=0;i<departmentArray.count;i++){
  168. AchiementDepartmentInfoModel *currentModel=departmentArray[i];
  169. NSString *currentOrganizationCode= currentModel.organizationCode;
  170. if(currentOrganizationCode.length<minCode.length){
  171. minSize= currentOrganizationCode.length;
  172. }
  173. else{
  174. minSize= minCode.length;
  175. }
  176. }
  177. }
  178. return minSize;
  179. }
  180. +(NSMutableArray*)findChildByOrganizationCode:(NSString*)organizationCode allArray:(NSMutableArray*)arry minLength:(NSInteger)minLen {
  181. NSMutableArray *childrenNodeArray=[[NSMutableArray alloc]init];
  182. if(arry!=nil&&arry.count>0){
  183. for(int i=0;i<arry.count;i++){
  184. AchiementDepartmentInfoModel *currentModel=arry[i];
  185. if ([currentModel.organizationCode hasPrefix:organizationCode]) {
  186. if((currentModel.organizationCode.length-organizationCode.length>0)&&(currentModel.organizationCode.length-organizationCode.length==minLen)){
  187. [childrenNodeArray addObject:currentModel];
  188. }
  189. }
  190. }
  191. }
  192. return childrenNodeArray;
  193. }
  194. +(Boolean)hasChild:(NSString*)organizationCode allArray:(NSMutableArray*)arry minLength:(NSInteger) len{
  195. Boolean isHaveChild=NO;
  196. if(arry!=nil&&arry.count>0){
  197. for(int i=0;i<arry.count;i++){
  198. AchiementDepartmentInfoModel *currentModel=arry[i];
  199. if ([currentModel.organizationCode hasPrefix:organizationCode]) {
  200. if((currentModel.organizationCode.length-organizationCode.length>0)&&(currentModel.organizationCode.length-organizationCode.length==len)){
  201. isHaveChild=YES;
  202. }
  203. }
  204. }
  205. }
  206. return isHaveChild;
  207. }
  208. +(void)bindChildByParent:(AchiementDepartmentInfoModel*) currentModel allArray:(NSMutableArray*)arry{
  209. NSInteger minLength= [Util findDepartmentsRootNodeLength:arry];
  210. AchiementDepartmentInfoModel *currentMo=currentModel;
  211. [currentMo setIsExpand:NO];
  212. NSInteger m=currentMo.organizationCode.length/minLength;
  213. [currentMo setLevelType:[NSString stringWithFormat:@"Level_Type_%ld",(long)m-1]];
  214. if([Util hasChild:currentMo.organizationCode allArray:arry minLength:minLength]){
  215. NSMutableArray *childArray= [Util findChildByOrganizationCode:currentMo.organizationCode allArray:arry minLength:minLength];
  216. NSMutableArray *tempChild=[[NSMutableArray alloc]init];
  217. for(int i=0;i<childArray.count;i++){
  218. AchiementDepartmentInfoModel *childM= childArray[i];
  219. NSInteger n=childM.organizationCode.length/minLength;
  220. [childM setIsExpand:NO];
  221. [childM setLevelType:[NSString stringWithFormat:@"Level_Type_%ld",(long)n-1]];
  222. BusinessDepartmentFrame *businessFrame=[BusinessDepartmentFrame new];
  223. [businessFrame setDepartmentFrame:childM];
  224. [tempChild addObject:businessFrame];
  225. }
  226. [currentMo setChildArray:tempChild];
  227. for(int i=0;i<childArray.count;i++){
  228. AchiementDepartmentInfoModel *subChildModel= childArray[i];
  229. if([Util hasChild:subChildModel.organizationCode allArray:arry minLength:minLength]){
  230. [self bindChildByParent:subChildModel allArray:arry];
  231. }
  232. }
  233. }
  234. }
  235. + (NSString*)deviceVersion
  236. {
  237. // 需要#import "sys/utsname.h"
  238. struct utsname systemInfo;
  239. uname(&systemInfo);
  240. NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  241. //CLog(@"%@",deviceString);
  242. if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
  243. if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
  244. if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
  245. if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
  246. if ([deviceString isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
  247. if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
  248. if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
  249. if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
  250. if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
  251. if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
  252. if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5S";
  253. if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
  254. if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
  255. if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
  256. if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6S";
  257. if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
  258. if ([deviceString isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
  259. if ([deviceString isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
  260. if ([deviceString isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
  261. if ([deviceString isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
  262. if ([deviceString isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
  263. if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
  264. if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
  265. if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
  266. if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
  267. if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
  268. if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
  269. if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
  270. if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
  271. if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
  272. if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
  273. if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
  274. return deviceString;
  275. }
  276. @end