GlobalMethod.m 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. //
  2. // GlobalMethod.m
  3. // 米兰港
  4. //
  5. // Created by 隋林栋 on 15/3/3.
  6. // Copyright (c) 2015年 Sl. All rights reserved.
  7. //
  8. #import "GlobalMethod.h"
  9. #import <sys/utsname.h>
  10. //数学
  11. #import <math.h>
  12. //提示框
  13. #import "NoticeView.h"
  14. //网络请求
  15. #import "AFNetworkReachabilityManager.h"
  16. //yykit
  17. //#import <YYKit/YYKit.h>
  18. @implementation GlobalMethod
  19. #pragma mark //解析错误信息
  20. + (NSString *)returnErrorMessage:(id)error{
  21. if (error == nil) {
  22. return @"错误为空";
  23. }
  24. if ([error isKindOfClass:[NSString class]]) {
  25. NSString * strError = (NSString *)error;
  26. if (strError.length >0) {
  27. return strError;
  28. }
  29. return @"错误为空";
  30. }
  31. if ([error isKindOfClass:[NSDictionary class]]) {
  32. NSString * strError = [error objectForKey:@"Message"];
  33. return strError;
  34. }
  35. return @"错误为空";
  36. }
  37. #pragma mark 角标清零
  38. + (void)zeroIcon{
  39. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
  40. }
  41. //处理小数点
  42. + (NSString *)exchangeNum:(double)num{
  43. NSString * strReturn =[NSString stringWithFormat:@"%.02f",round(num*100)/100 ];
  44. return strReturn;
  45. }
  46. //去掉空格
  47. + (NSString *)exchangeEmpty:(NSString *)str{
  48. if (str == nil || ![str isKindOfClass:[NSString class]]) {
  49. return @"";
  50. }
  51. NSString * strReturn = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
  52. return strReturn;
  53. }
  54. //去掉换行
  55. + (NSString *)exchangeBlack:(NSString *)str{
  56. if (str == nil || ![str isKindOfClass:[NSString class]]) {
  57. return @"";
  58. }
  59. NSString * strReturn = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  60. return strReturn;
  61. }
  62. //转换为jsong
  63. + (NSString *)exchangeDicToJson:(id)object{
  64. if (object == nil) {
  65. NSLog(@"error json转换错误");
  66. return @"";
  67. }
  68. if ([object isKindOfClass:[NSDictionary class]]||[object isKindOfClass:[NSArray class]]) {
  69. NSData * dataJson = [NSJSONSerialization dataWithJSONObject:object options:0 error:nil];
  70. NSString * strJson = [[NSString alloc]initWithData:dataJson encoding:NSUTF8StringEncoding];
  71. return strJson;
  72. }
  73. return @"";
  74. }
  75. //转换为jsong
  76. + (NSString *)exchangeModelsToJson:(NSArray *)object{
  77. if (object == nil) {
  78. NSLog(@"error json转换错误");
  79. return @"";
  80. }
  81. NSMutableArray * aryMu = [NSMutableArray new];
  82. if ([object isKindOfClass:[NSArray class]]) {
  83. for (id model in object) {
  84. NSDictionary * dic = [GlobalMethod performSelector:@"dictionaryRepresentation" delegate:model object:nil isHasReturn:true];
  85. if (dic != nil) {
  86. [aryMu addObject:dic];
  87. }
  88. }
  89. }
  90. return [self exchangeDicToJson:aryMu];
  91. }
  92. //转换json
  93. + (NSString *)exchangeModelToJson:(id)model{
  94. if (!model) return @"";
  95. if (![model respondsToSelector:@selector(dictionaryRepresentation)]) return @"";
  96. NSDictionary * dicJson = [model dictionaryRepresentation];
  97. NSData * dataJson = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil];
  98. NSString * strJson = [[NSString alloc]initWithData:dataJson encoding:NSUTF8StringEncoding];
  99. return strJson!=nil?strJson:@"";
  100. }
  101. + (NSMutableArray *)exchangeDic:(id)response toAryWithModelName:(NSString *)modelName{
  102. if (response == nil || !isStr(modelName)) {
  103. return [NSMutableArray array];
  104. }
  105. id class = NSClassFromString(modelName);
  106. if (class == nil) {
  107. return [NSMutableArray array];
  108. }
  109. if (response && [response isKindOfClass:[NSDictionary class]]) {
  110. if ([class respondsToSelector:@selector(modelObjectWithDictionary:)]) {
  111. id model = [class performSelector:@selector(modelObjectWithDictionary:) withObject:response];
  112. return [NSMutableArray arrayWithObject:model];
  113. }
  114. }
  115. if (response && [response isKindOfClass:[NSArray class]]) {
  116. NSMutableArray * aryReturn = [NSMutableArray array];
  117. for (NSDictionary * dic in (NSArray *)response) {
  118. if ([class respondsToSelector:@selector(modelObjectWithDictionary:)]) {
  119. id model = [class performSelector:@selector(modelObjectWithDictionary:) withObject:dic];
  120. [aryReturn addObject:model];
  121. }
  122. }
  123. return aryReturn;
  124. }
  125. return [NSMutableArray array];
  126. }
  127. + (NSMutableArray *)exchangeAryModelToAryDic:(NSArray *)response{
  128. if (!isAry(response)) {
  129. return [NSMutableArray array];
  130. }
  131. NSMutableArray * aryReturn = [NSMutableArray array];
  132. for (NSObject *subArrayObject in response) {
  133. if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
  134. // This class is a model object
  135. [aryReturn addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
  136. } else {
  137. // Generic object
  138. [aryReturn addObject:subArrayObject];
  139. }
  140. }
  141. return aryReturn;
  142. }
  143. + (id)exchangeDicToModel:(NSDictionary *)dic modelName:(NSString *)strName{
  144. if (!isStr(strName)) {
  145. return nil;
  146. }
  147. Class class = NSClassFromString(strName);
  148. if (class == nil) {
  149. return nil;
  150. }
  151. if ([dic isKindOfClass:[NSArray class]]) {
  152. return [self performSelector:@"modelObjectWithDictionary:" delegate:class object:[(NSArray *)dic lastObject] isHasReturn:true];
  153. }
  154. if (dic == nil || ![dic isKindOfClass:[NSDictionary class]]) {
  155. return [[class alloc]init];
  156. }
  157. return [self performSelector:@"modelObjectWithDictionary:" delegate:class object:dic isHasReturn:true];
  158. }
  159. //delegate 执行 selector
  160. + (id)performSelector:(NSString *)selectorName delegate:(id)delegate{
  161. return [self performSelector:selectorName delegate:delegate object:nil isHasReturn:false];
  162. }
  163. + (id)performSelector:(NSString *)selectorName delegate:(id)delegate object:(id)object isHasReturn:(BOOL)isHasReturn{
  164. SEL selector = NSSelectorFromString(selectorName);
  165. if (delegate != nil && [delegate respondsToSelector:selector]) {
  166. if (isHasReturn) {
  167. return [delegate performSelector:selector withObject:object];
  168. }else{
  169. [delegate performSelector:selector withObject:object];
  170. return nil;
  171. }
  172. }
  173. return nil;
  174. }
  175. + (id)performSelector:(NSString *)selectorName delegate:(id)delegate object:(id)object object:(id)object2 isHasReturn:(BOOL)isHasReturn{
  176. SEL selector = NSSelectorFromString(selectorName);
  177. if (delegate != nil && [delegate respondsToSelector:selector]) {
  178. if (isHasReturn) {
  179. return [delegate performSelector:selector withObject:object withObject:object2];
  180. }else{
  181. [delegate performSelector:selector withObject:object withObject:object2];
  182. return nil;
  183. }
  184. }
  185. return nil;
  186. }
  187. //移除空白
  188. + (void)removeEmpty:(NSMutableArray *)ary key:(NSString *)strKey{
  189. NSMutableDictionary * dic = [NSMutableDictionary dictionary];
  190. for (id model in ary) {
  191. id key = [model valueForKey:strKey];
  192. if (key != nil && [key isKindOfClass:[NSString class]]) {
  193. NSString * strKey = key;
  194. if (isStr(strKey)) {
  195. [dic setValue:model forKey:key];
  196. }
  197. }
  198. }
  199. [ary removeAllObjects];
  200. [ary addObjectsFromArray:dic.allValues];
  201. }
  202. //转换data to dic
  203. + (NSDictionary *)exchangeDataToDic:(NSData *)data{
  204. // NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  205. if (data == nil || ![data isKindOfClass:[NSData class]]) {
  206. return nil;
  207. }
  208. return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
  209. }
  210. //转换String to dic
  211. + (NSDictionary *)exchangeStringToDic:(NSString *)str{
  212. if (!isStr(str)) {
  213. return [NSDictionary dictionary];
  214. }
  215. NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
  216. NSDictionary * dicReturn = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  217. return dicReturn;
  218. }
  219. //转换String to ary
  220. + (NSArray *)exchangeStringToAry:(NSString *)str{
  221. if (!isStr(str)) {
  222. return [NSArray array];
  223. }
  224. NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
  225. NSArray * aryReturn = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  226. return aryReturn;
  227. }
  228. //十六进制转颜色
  229. + (UIColor *)exchangeColorWith16:(NSString*)hexColor
  230. {
  231. return [GlobalMethod exchangeColorWith16:hexColor alpha:1.0f];
  232. }
  233. //十六进制转颜色 alpha
  234. + (UIColor *)exchangeColorWith16:(NSString*)hexColor alpha:(CGFloat)alpha
  235. {
  236. unsigned int red,green,blue;
  237. NSRange range;
  238. range.length = 2;
  239. range.location = 0;
  240. [[NSScanner scannerWithString:[hexColor substringWithRange:range]]scanHexInt:&red];
  241. range.location = 2;
  242. [[NSScanner scannerWithString:[hexColor substringWithRange:range]]scanHexInt:&green];
  243. range.location = 4;
  244. [[NSScanner scannerWithString:[hexColor substringWithRange:range]]scanHexInt:&blue];
  245. return [UIColor colorWithRed:(float)(red/255.0f)green:(float)(green / 255.0f) blue:(float)(blue / 255.0f)alpha:alpha];
  246. }
  247. //隐藏显示tag视图
  248. + (void)showHideViewWithTag:(int)tag inView:(UIView *)viewAll isshow:(BOOL)isShow{
  249. UIView * viewTag = [viewAll viewWithTag:tag];
  250. if (viewTag != nil) {
  251. viewTag.hidden = !isShow;
  252. }
  253. }
  254. //显示提示
  255. + (void)showAlert:(NSString *)strAlert{
  256. UIWindow * window = [UIApplication sharedApplication].keyWindow;
  257. [window endEditing:true];
  258. [[GlobalData sharedInstance].GB_NoticeView showNotice:strAlert time:1 frame:[UIScreen mainScreen].bounds viewShow:window ];
  259. }
  260. //获取版本号
  261. + (NSString *)getVersion{
  262. NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
  263. NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
  264. return appVersion;
  265. }
  266. //获取APP名字
  267. + (NSString *)getAppName{
  268. NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
  269. NSString *appName = [infoDic objectForKey:@"CFBundleDisplayName"];
  270. return appName;
  271. }
  272. /**
  273. *获取设备型号
  274. */
  275. + (NSString *)LookDeviceName{
  276. struct utsname systemInfo;
  277. uname(&systemInfo);
  278. return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  279. }
  280. //适配label字号
  281. + (CGFloat)adaptLabelFont:(CGFloat)fontNum{
  282. if (isIphone5) {
  283. return fontNum - 1;
  284. } else if (isIphone6){
  285. return fontNum;
  286. } else if (isIphone6p){
  287. return fontNum + 1;
  288. }
  289. return fontNum + 2;
  290. }
  291. #pragma mark 根据推送的消息进行跳转
  292. + (void)jumpWithPushJson{
  293. }
  294. #pragma mark 验证HTML
  295. +(NSString *)removeHTML:(NSString *)html {
  296. NSScanner *theScanner;
  297. NSString *text = nil;
  298. theScanner = [NSScanner scannerWithString:html];
  299. while ([theScanner isAtEnd] == NO) {
  300. // find start of tag
  301. [theScanner scanUpToString:@"<" intoString:NULL] ;
  302. // find end of tag
  303. [theScanner scanUpToString:@">" intoString:&text] ;
  304. // replace the found tag with a space
  305. //(you can filter multi-spaces out later if you wish)
  306. html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@" "];
  307. }
  308. return html;
  309. }
  310. #pragma mark 弹出提示
  311. + (void)showNotiInStatusBar:(NSString *)strMsg msg:(NSString *)msg bageNum:(int)msgCount{
  312. UILocalNotification* noti = [[UILocalNotification alloc]init];
  313. NSDate* now = [NSDate date];
  314. noti.fireDate = [now dateByAddingTimeInterval:1];
  315. noti.timeZone = [NSTimeZone defaultTimeZone];
  316. noti.alertBody = strMsg;
  317. noti.alertTitle = msg;
  318. noti.soundName = UILocalNotificationDefaultSoundName;
  319. noti.alertAction = strMsg;
  320. noti.applicationIconBadgeNumber = msgCount;
  321. // [noti setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1], @"notikey", nil]];
  322. //NSLog(@"您有%d条消息需要处理",msgCount);
  323. [[UIApplication sharedApplication] scheduleLocalNotification:noti];
  324. }
  325. #pragma mark 拼写文件名
  326. + (NSString *)fetchDoumentPath:(NSString *)name{
  327. NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"sld"];
  328. [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
  329. NSString *result = [path stringByAppendingPathComponent:name];
  330. return result;
  331. }
  332. + (NSString*)fetchDoumentSize{
  333. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  334. NSString *documentsDirectory = [paths objectAtIndex:0];
  335. NSString * strPath = [documentsDirectory stringByAppendingPathComponent:@"default"];
  336. NSFileManager *fileManager = [NSFileManager defaultManager];
  337. long long num = 0;
  338. if ([fileManager fileExistsAtPath:strPath]){
  339. num = [[fileManager attributesOfItemAtPath:strPath error:nil] fileSize];
  340. }
  341. return 0;
  342. // NSLog(@"%@",[NSString stringWithFormat:@"%l",num/(1024.0*1024.0)]);
  343. // return [NSString stringWithFormat:@"%l",num/(1024.0*1024.0)];
  344. }
  345. #pragma mark 判断推送状态
  346. //+ (BOOL)IsEnablePush{
  347. // if (isIOS8) {// system is iOS8
  348. // UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
  349. // if (UIUserNotificationTypeNone != setting.types) {
  350. // return YES;
  351. // }
  352. // } else {//iOS7
  353. // UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
  354. // if(UIRemoteNotificationTypeNone != type)
  355. // return YES;
  356. // }
  357. // return NO;
  358. //}
  359. #pragma mark 判断网络状态
  360. + (BOOL)IsEnableNetwork{
  361. if ([[AFNetworkReachabilityManager sharedManager] networkReachabilityStatus] == AFNetworkReachabilityStatusNotReachable) {
  362. return NO;
  363. }
  364. return YES;
  365. }
  366. + (BOOL)IsEnableWifi{
  367. return ([[AFNetworkReachabilityManager sharedManager] networkReachabilityStatus] == AFNetworkReachabilityStatusReachableViaWiFi);
  368. }
  369. + (BOOL)IsENable3G{
  370. return ([[AFNetworkReachabilityManager sharedManager] networkReachabilityStatus] == AFNetworkReachabilityStatusReachableViaWWAN);
  371. }
  372. #pragma mark encode decode
  373. +(NSString*)encodeString:(NSString*)unencodedString{
  374. // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
  375. // CharactersToLeaveUnescaped = @"[].";
  376. NSString*encodedString=(NSString*)
  377. CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
  378. (CFStringRef)unencodedString,
  379. NULL,
  380. (CFStringRef)@"!*'();:@&=+$,/?%#[]",
  381. kCFStringEncodingUTF8));
  382. return encodedString;
  383. }
  384. //URLDEcode
  385. +(NSString*)decodeString:(NSString*)encodedString
  386. {
  387. //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
  388. NSString*decodedString=(__bridge_transfer NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
  389. (__bridge CFStringRef)encodedString,
  390. CFSTR(""),
  391. CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
  392. return decodedString;
  393. }
  394. #pragma mark获取某个字符串或者汉字的首字母.
  395. + (NSString *)fetchFirstCharactorWithString:(NSString *)string
  396. {
  397. if (!isStr(string)) {
  398. return @"";
  399. }
  400. NSMutableString *str = [NSMutableString stringWithString:string];
  401. CFStringTransform((CFMutableStringRef) str, NULL, kCFStringTransformMandarinLatin, NO);
  402. CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
  403. NSString *pinYin = [str capitalizedString];
  404. return [pinYin substringToIndex:1];
  405. }
  406. #pragma mark 收键盘
  407. + (void)hideKeyboard{
  408. UIViewController * vc = GB_Nav.lastVC;
  409. [vc.view endEditing:true];
  410. }
  411. #pragma mark - 获取地图Bundle中turnIcon图片
  412. +(UIImage *)getImageFromAMapNaviBundle:(NSString *)imageName{
  413. NSURL *bundleURL = [[[NSBundle mainBundle] URLForResource:@"AMapNavi" withExtension:@"bundle"] URLByAppendingPathComponent:@"images"];
  414. NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
  415. UIImage *image = [UIImage imageNamed:imageName inBundle:bundle compatibleWithTraitCollection:nil];
  416. return image;
  417. }
  418. #pragma mark - 返回NSAttributedString并且带图片
  419. + (NSAttributedString *)returnNSAttributedStringWithContentStr:(NSString *)labelStr titleColor:(UIColor *)titleColor withlineSpacing:(CGFloat)lineSpacing withAlignment:(NSInteger)alignment withFont:(UIFont *)font withImageName:(NSString *)imageName withImageRect:(CGRect)rect withAtIndex:(NSUInteger)index
  420. {
  421. NSString * detailStr = labelStr;
  422. if (detailStr.length > 0 && ![detailStr isEqualToString:@"<null>"] && ![detailStr isEqualToString:@"(null)"])
  423. {
  424. NSMutableAttributedString * detailAttrString = [[NSMutableAttributedString alloc]initWithString:detailStr];
  425. NSMutableParagraphStyle * detailParagtaphStyle = [[NSMutableParagraphStyle alloc]init];
  426. detailParagtaphStyle.alignment = alignment; //设置两端对齐(3)
  427. NSDictionary * detaiDic = @{NSFontAttributeName : font,
  428. //NSKernAttributeName : [NSNumber numberWithInteger:W(0)],
  429. NSForegroundColorAttributeName:titleColor,
  430. NSParagraphStyleAttributeName : detailParagtaphStyle
  431. };
  432. [detailAttrString setAttributes:detaiDic range:NSMakeRange(0, detailAttrString.length)];
  433. //设置图片
  434. NSTextAttachment * attch = [[NSTextAttachment alloc] init];
  435. attch.image = [UIImage imageNamed:imageName];
  436. attch.bounds = rect;
  437. NSAttributedString * string1 = [NSAttributedString attributedStringWithAttachment:attch];
  438. [detailAttrString insertAttributedString:string1 atIndex:index];
  439. // detailAttrString.lineSpacing = lineSpacing;
  440. return detailAttrString;
  441. }
  442. else
  443. {
  444. return nil;
  445. }
  446. }
  447. //字符串数组转化为字符串
  448. +(id)parseJSONStringToNSDictionary:(NSString *)JSONString {
  449. if (JSONString==nil) {
  450. return nil;
  451. }
  452. NSData *JSONData = [JSONString dataUsingEncoding:NSUTF8StringEncoding];
  453. NSError *error = nil;
  454. id jsonObject = [NSJSONSerialization
  455. JSONObjectWithData:JSONData options:NSJSONReadingAllowFragments
  456. error:&error];
  457. if (jsonObject != nil && error == nil){
  458. // NSLog(@"反序列化成功...");
  459. if ([jsonObject isKindOfClass:[NSDictionary class]]){
  460. NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
  461. // NSLog(@"反序列化后的dictionary数据 = %@", deserializedDictionary);
  462. return deserializedDictionary;
  463. }
  464. else if ([jsonObject isKindOfClass:[NSArray class]]){
  465. NSArray *deserializedArray = (NSArray *)jsonObject;
  466. // NSLog(@"反序列化json后的数组 = %@", deserializedArray);
  467. return deserializedArray;
  468. }else {
  469. return nil;
  470. }
  471. }else{
  472. NSLog(@"%@", error);
  473. NSLog(@"反序列化时发生一个错误");
  474. return JSONString;
  475. }
  476. }
  477. //获取所在vc
  478. + (UIViewController *)fetchVCWithView:(UIView *)view{
  479. for (UIView* next = view ; next; next = next.superview) {
  480. UIResponder* nextResponder = [next nextResponder];
  481. if ([nextResponder isKindOfClass:[UIViewController class]]) {
  482. return (UIViewController*)nextResponder;
  483. }
  484. }
  485. return nil;
  486. }
  487. @end