iOS 常見的宏

極力推薦:技術(shù)分享和Demo應(yīng)用
如果大家有其他的常用的宏定義瘫镇,歡迎添加,東西如果不全面,請(qǐng)批評(píng)和指正! (1. 判斷機(jī)型
, 2.適配iPhone Xs MAX TabBar和導(dǎo)航,適配6s為基準(zhǔn),ipd,iPhone自適應(yīng)大小, 3.獲取系統(tǒng)版本 iOS 13 , 4.GRB 顏色設(shè)置, 5.用于正則式,并非正則式, 6.常用提示框, 7.是否為空或是[NSNull null], 8.字符串是否為空, 9.數(shù)組是否為空, 10.便捷方式創(chuàng)建NSNumber類型, 11.便捷創(chuàng)建NSString, 12.線程執(zhí)行方法, 13.單例創(chuàng)建, 14.通過字典的key 獲取NSString,NSNumber,NSDictionary, 15.block 聲明 16.NSString轉(zhuǎn)UTF8 17.去空格,首尾空格和換行符,去掉所有的空格),18. 字體設(shè)置, 19.獲取相關(guān)權(quán)限,20.弱引用和強(qiáng)引用, 21.獲取圖片資源, 22.arc 和mrc 會(huì)陸續(xù)更新最新使用的方法... , 23.字體設(shè)置 , 24. 存取值 , 25.獲取圖片和獲取版本號(hào)

  • 14:通過字典的key 獲取 NSString,NSNumber,NSDictionary ,NSArray (推薦使用)

  • 常用方法: 1.計(jì)算Label多行的高度, 2.登錄密碼正則表達(dá)式(大字母或者小寫字母,數(shù)字,特殊符號(hào),必須有都含有,8-16位) ,3.返回指定的界面 4.獲取網(wǎng)絡(luò)運(yùn)行商 ,5.自我封裝NSdate 常用方法(不完善持續(xù)更新...)

附加:Xcode注釋和推薦使用

// FIXME: (標(biāo)示處代碼需要修正窜司,使用方法)  // FIXME: ??
// TODO:  (標(biāo)示處有功能代碼待編寫筒繁,使用方法) // TODO:??
// !!!:  (標(biāo)示處代碼需要注意熟呛,使用方法) // !!!:??
// MARK:  (標(biāo)記广辰,和#pragma mark效果相同) // MARK:??

局部常量:static const NSString *NAME = @“fansion”;//用static修飾后外部不能訪問
全局常量:不管在哪個(gè)文件夾讲岁,外部都能訪問;
const NSString *NAME = @“fansion”;//*NAME不能被修改酵幕,NAME可以
NSString const *NAME = @“fansion”;//*NAME不能被修改扰藕,NAME可以
NSString *const NAME = @“fansion”;//*NAME能被修改,NAME不可以

1.適配 iPhone 14

#define kScreenWidth            ([[UIScreen mainScreen] bounds].size.width)

#define kScreenHeight            ([[UIScreen mainScreen] bounds].size.height)

/**適配 iPhone X TabBar和導(dǎo)航區(qū)別

   * Top區(qū)別:iPhone 14 為例:導(dǎo)航(44 points)+狀態(tài)欄(47 points)= 91 points

    * Top區(qū)別:iPhone 14 pro  為例:導(dǎo)航(44 points)+狀態(tài)欄(54 points)= 99 points

   *        Iphone 6s為例:導(dǎo)航(44 points)+狀態(tài)欄(20 points)= 64 points

   * Bottom區(qū)別:iPhone X 為例: 83 points高度(TabBar) = Danger Area(34 points) + 原來的49 points

   *          Iphone 6s為例:49 points高度(TabBar) = 49 points
   */

//iPhone14 (47) / iPhone14 Pro Max (54)

/**狀態(tài)欄的高度**/
let kStatusBarHeight: CGFloat = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
/**底部安全區(qū)域高度**/
let kSafeAreaBottom: CGFloat = window?.safeAreaInsets.bottom ?? 0
/**狀態(tài)欄+navi高度**/
let kNavAndStatusBarHeight: CGFloat =  kStatusBarHeight + 44

#define  TabbarHeight        (isFullScreen ? (49.f+34.f) :49.f)

#define  TabbarSafeBottomHeight        (isFullScreen ?34.f:0.f)

#define  StatusBarAndNavigationBarHeight  (isFullScreen ?88.f:64.f)

/* iOS設(shè)備 */
#define kDevice_Is_iPhone4s ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6PlusBigMode ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2001), [[UIScreen mainScreen]currentMode].size) : NO)
#define iphoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen]currentMode].size) : NO)

#define PW ([UIScreen mainScreen].bounds.size.width/375)
#define PH ([UIScreen mainScreen].bounds.size.height/667)
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height

//6s適配參數(shù)
#define KsuitParam (kDevice_Is_iPhone6Plus ?1.12:(kDevice_Is_iPhone6?1.0:(iPhone6PlusBigMode ?1.01:(iphoneX ? 1.0 : 0.85)))) //以6s為基準(zhǔn)圖

2.判斷機(jī)型

//判斷是否為iPhone
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

//判斷是否為iPad
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

//判斷是否為ipod
#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])


// 判斷 iPad
#define DX_UI_IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

// 判斷iPhone X
#define DX_Is_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

//判斷iPHoneXr | 11
#define DX_Is_iPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//判斷iPHoneXs | 11Pro
#define DX_Is_iPhoneXS ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//判斷iPhoneXs Max | 11ProMax
#define DX_Is_iPhoneXS_MAX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//判斷iPhone12_Mini
#define DX_Is_iPhone12_Mini ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1080, 2340), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//判斷iPhone12 | 12Pro
#define DX_Is_iPhone12 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//判斷iPhone12 Pro Max
#define DX_Is_iPhone12_ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1284, 2778), [[UIScreen mainScreen] currentMode].size) && !DX_UI_IS_IPAD : NO)

//x系列
#define DX_IS_IPhoneX_All (DX_Is_iPhoneX || DX_Is_iPhoneXR || DX_Is_iPhoneXS || DX_Is_iPhoneXS_MAX || DX_Is_iPhone12_Mini || DX_Is_iPhone12 || DX_Is_iPhone12_ProMax)


  1. 獲取系統(tǒng)版本
#ifndef __IPHONE_13_0
#define __IPHONE_13_0 130000
#endif

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
...
#endif

#define IOS_SYSTEM_STRING [[UIDevice currentDevice] systemVersion]
#define IOS11_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0)
#define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)
#define IOS9_OR_LATER  ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)
#define IOS8_OR_LATER  ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#define IOS7_OR_LATER  ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

4.GRB 顏色設(shè)置

/** 顏色RGB */
#define HSVCOLOR(h,s,v) [UIColor colorWithHue:h saturation:s value:v alpha:1]
#define HSVACOLOR(h,s,v,a) [UIColor colorWithHue:h saturation:s value:v alpha:a]

/** 16進(jìn)制色值參數(shù)轉(zhuǎn)換 */
#define UIColorFromRGB(rgbValue) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

4.ImageNamed 設(shè)置

#define ImageNamed(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]

5.用于正則式

/** 用于正則式 */
/** 用于正則式 */
#define NUM @"0123456789"
#define ALPHA @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define ALPHANUM @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
/** 驗(yàn)證手機(jī)號(hào)及固話方法 */
#define TelephoneNUM  @"^(0[0-9]{2,3})?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$|(^(13[0-9]|15[0|3|6|7|8|9]|18[8|9])\\d{8}$)"
/** 判斷社會(huì)信用代碼證 */
#define SocialCreditNUM  @"^([0-9ABCDEFGHJKLMNPQRTUWXY]{2})([0-9]{6})([0-9ABCDEFGHJKLMNPQRTUWXY]{9})([0-9Y])$"
/** 工商稅號(hào) */
#define BusinessCirclesNUM  @"[0-9]\\\\d{13}([0-9]|X)$"
/** 郵政編碼 */
#define CodeNUM  @"^[0-8]\\\\d{5}(?!\\\\d)$"
/** 驗(yàn)證身份證號(hào)(15位或18位數(shù)字) */
#define IDCardNUM  @"\\d{14}[[0-9],0-9xX]"
/** 驗(yàn)證Email地址 */
#define EmailNUM  @"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$"
/** 整數(shù)或者小數(shù) */
#define IntAndDecimalNUM  @"^[0-9]+([.]{0,1}[0-9]+){0,1}$"
/** 驗(yàn)證URL */
#define URLNUM  @"^http://([\\w-]+\.)+[\\w-]+(/[\\w-./?%&=]*)?$"
/** 驗(yàn)證QQ */
#define QQNUM  @"[1-9][0-9]\{4,\}"
/** 匹配帳號(hào)是否合法 */
#define AccountLegalityNUM  @"^[a-zA-Z][a-zA-Z0-9_]{4,15}$"
/** 只能輸入漢字 */
#define ChineseCharactersNUM  @"^[\u4e00-\u9fa5]{0,}$"
/** 匹配空白行的正則表達(dá)式 */
#define SpaceNUM  @"^\n\s*\r"

6.常用NSlog打印

/** 打印 NSlog */
#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

/**打印信息*/
#define NSLogI(fmt, ...) NSLog((@"%s ??INFO [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

/**調(diào)試信息*/
#define NSLogD(fmt, ...) NSLog((@"%s ??DEBUG [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

/**錯(cuò)誤信息*/
#define NSLogE(fmt, ...) NSLog((@"%s ??ERROR [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

/**未知信息*/
#define NSLogU(fmt, ...) NSLog((@"%s ??UNKNOW [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

6.常用提示框

/** 彈出提示框 UIAlertView */
#define showMessageView(__MESSAGE__) \
UIAlertView *alertView_ = [[UIAlertView alloc] initWithTitle:@"提示" \
message:__MESSAGE__ \
delegate:nil \
cancelButtonTitle:@"確定" \
otherButtonTitles:nil]; \
[alertView_ show];

/** 彈出提示框 UIAlertController */
#define showMessageController(MESSAGE,VC) \
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:MESSAGE preferredStyle:UIAlertControllerStyleAlert]; \
UIAlertAction *action = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:nil]; \
[alertController addAction:action]; \
[VC presentViewController:alertController animated:YES completion:nil]

7.是否為空或是[NSNull null]

/**是否為空或是[NSNull null] */
#define NotNilAndNull(_ref)  (((_ref) != nil) && (![(_ref) isEqual:[NSNull null]]))
#define IsNilOrNull(_ref)   (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]])
  1. 字符串是否為空
/**是否為空或是[NSNull null] */
#define IsStrEmpty(_ref)    (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref)isEqualToString:@""]))
  1. 數(shù)組是否為空
#define IsArrEmpty(_ref)    (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref) count] == 0))

10.便捷方式創(chuàng)建NSNumber類型

/** 便捷方式創(chuàng)建NSNumber類型 */
#undef    __INT
#define __INT( __x )            [NSNumber numberWithInt:(NSInteger)__x]

#undef    __UINT
#define __UINT( __x )            [NSNumber numberWithUnsignedInt:(NSUInteger)__x]

#undef    __FLOAT
#define    __FLOAT( __x )            [NSNumber numberWithFloat:(float)__x]

#undef    __DOUBLE
#define    __DOUBLE( __x )            [NSNumber numberWithDouble:(double)__x]

11.便捷創(chuàng)建NSString

/** 便捷創(chuàng)建NSString */
#undef  STR_FROM_INT
#define STR_FROM_INT( __x )     [NSString stringWithFormat:@"%d", (__x)]

12.線程執(zhí)行方法

/** 線程執(zhí)行方法 */
#define Foreground_Begin  dispatch_async(dispatch_get_main_queue(), ^{
#define Foreground_End    });

#define Background_Begin  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\
@autoreleasepool {
#define Background_End          }\
});

13.單例創(chuàng)建

/** 線程執(zhí)行方法 */
#undef    AS_SINGLETON
#define AS_SINGLETON( __class ) \
+ (__class *)sharedInstance;

#undef    DEF_SINGLETON
#define DEF_SINGLETON( __class ) \
+ (__class *)sharedInstance \
{ \
static dispatch_once_t once; \
static __class * __singleton__; \
dispatch_once( &once, ^{ __singleton__ = [[__class alloc] init]; } ); \
return __singleton__; \
}

  1. 通過字典的key 獲取NSString,NSNumber,NSDictionary ,NSArray
.h創(chuàng)建
/** 通過字典的key 獲取value (判斷轉(zhuǎn)換為)NSString */
extern NSString* EncodeStringFromDic(NSDictionary *dic, NSString *key);
/** 通過字典的key 獲取value (判斷轉(zhuǎn)換為)NSNumber */
extern NSNumber* EncodeNumberFromDic(NSDictionary *dic, NSString *key);
extern NSDictionary *EncodeDicFromDic(NSDictionary *dic, NSString *key);
extern NSArray      *EncodeArrayFromDic(NSDictionary *dic, NSString *key);
extern NSArray      *EncodeArrayFromDicUsingParseBlock(NSDictionary *dic, NSString *key, id(^parseBlock)(NSDictionary *innerDic));

.m創(chuàng)建

NSString* EncodeStringFromDic(NSDictionary *dic, NSString *key)
{
    id temp = [dic objectForKey:key];
    if ([temp isKindOfClass:[NSString class]])
    {
        return temp;
    }
    else if ([temp isKindOfClass:[NSNumber class]])
    {
        return [temp stringValue];
    }
    return nil;
}

NSNumber* EncodeNumberFromDic(NSDictionary *dic, NSString *key)
{
    id temp = [dic objectForKey:key];
    if ([temp isKindOfClass:[NSString class]])
    {
        return [NSNumber numberWithDouble:[temp doubleValue]];
    }
    else if ([temp isKindOfClass:[NSNumber class]])
    {
        return temp;
    }
    return nil;
}

NSDictionary *EncodeDicFromDic(NSDictionary *dic, NSString *key)
{
    id temp = [dic objectForKey:key];
    if ([temp isKindOfClass:[NSDictionary class]])
    {
        return temp;
    }
    return nil;
}

NSArray      *EncodeArrayFromDic(NSDictionary *dic, NSString *key)
{
    id temp = [dic objectForKey:key];
    if ([temp isKindOfClass:[NSArray class]])
    {
        return temp;
    }
    return nil;
}

NSArray      *EncodeArrayFromDicUsingParseBlock(NSDictionary *dic, NSString *key, id(^parseBlock)(NSDictionary *innerDic))
{
    NSArray *tempList = EncodeArrayFromDic(dic, key);
    if ([tempList count])
    {
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:[tempList count]];
        for (NSDictionary *item in tempList)
        {
            id dto = parseBlock(item);
            if (dto) {
                [array addObject:dto];
            }
        }
        return array;
    }
    return nil;
}


15.block 聲明

#ifdef NS_BLOCKS_AVAILABLE
typedef void (^ZLyBasicBlock)(void);
typedef void (^ZLyOperationCallBackBlock)(BOOL isSuccess, NSString *errorMsg);
typedef void (^ZLyArrayBlock)(NSArray *list);
#endif

16.NSString轉(zhuǎn)UTF8

#define OC(str) [NSString stringWithCString:(str) encoding:NSUTF8StringEncoding]

17.去空格,首尾空格和換行符,去掉所有的空格

/** 去掉首尾空格和換行符 */
#define FirstAndLastSpace(str) [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
/**去掉所有空格*/
#define RemoveAllSpaces(str) [str stringByReplacingOccurrencesOfString:@" " withString:@""]

18.字體設(shè)置

#define Font_Size(f)            [UIFont systemFontOfSize:(f)]
#define Font_Bold_Size(f)       [UIFont boldSystemFontOfSize:(f)]
#define Font_Italic_Size(f)     [UIFont italicSystemFontOfSize:(f)]
#define FontMediumSize(s) [UIFont fontWithName:@"xxx" size:s]
#define FontRegularSize(s) [UIFont fontWithName:@"xxx" size:s]

19.獲取相關(guān)權(quán)限. 相加,地位等

//獲取相機(jī)權(quán)限狀態(tài)
#define CameraStatus [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]
#define CameraDenied ((CameraStatus == AVAuthorizationStatusRestricted)||(CameraStatus == AVAuthorizationStatusDenied))
#define CameraAllowed (!CameraDenyed)
 
/** 定位權(quán)限*/
#define LocationStatus [CLLocationManager authorizationStatus];
#define LocationAllowed ([CLLocationManager locationServicesEnabled] && !((status == kCLAuthorizationStatusDenied) || (status == kCLAuthorizationStatusRestricted)))
#define LocationDenied (!LocationAllowed)
 
/** 消息推送權(quán)限*/
#define PushClose (([[UIDevice currentDevice].systemVersion floatValue]>=8.0f)?(UIUserNotificationTypeNone == [[UIApplication sharedApplication] currentUserNotificationSettings].types):(UIRemoteNotificationTypeNone == [[UIApplication sharedApplication] enabledRemoteNotificationTypes]))
#define PushOpen (!PushClose)

20.弱引用,強(qiáng)引用

#define WeakSelf(type)  __weak typeof(type) weak##type = type;
#define StrongSelf(type)  __strong typeof(type) type = weak##type;

21.獲取圖片資源

#define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]

22.arc OR mrc

#if __has_feature(objc_arc)
// ARC
#else
// MRC
#endif

23.字體設(shè)置

#define IsIphone6P          SCREEN_WIDTH==414
#define SizeScale           (IsIphone6P ? 1.5 : 1)
#define kFontSize(value)    value*SizeScale
#define kFont(value)        [UIFont systemFontOfSize:value*SizeScale]
/**36px 導(dǎo)航欄文字**/
#define ZLyFont_36 [UIFont systemFontOfSize:36 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**32px 按鈕文字,標(biāo)題文字**/
#define ZLyFont_32 [UIFont systemFontOfSize:32 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**30px 正文內(nèi)容**/
#define ZLyFont_30 [UIFont systemFontOfSize:30 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**28px 填寫描述**/
#define ZLyFont_28 [UIFont systemFontOfSize:28 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**26px 輔助文字**/
#define ZLyFont_26 [UIFont systemFontOfSize:26 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**24px 輔助文字**/
#define ZLyFont_24 [UIFont systemFontOfSize:24 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**22px 說明性文字**/
#define ZLyFont_22 [UIFont systemFontOfSize:22 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**20px 輔助說明性文字**/
#define ZLyFont_20 [UIFont systemFontOfSize:20 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]
/**100px **/
#define ZLyFont_100 [UIFont systemFontOfSize:100 / (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)?750.0:1536.0) * [UIScreen mainScreen].bounds.size.width]

24 存取數(shù)據(jù)

//存值
#define kSaveMyDefault(A,B) [[NSUserDefaults standardUserDefaults] setObject:B forKey:A]
//取值
#define kFetchMyDefault(A) [[NSUserDefaults standardUserDefaults] objectForKey:A]

#define kSaveZLyDefault(A,B) [[NSUserDefaults standardUserDefaults] setInteger:B forKey:A]

#define kFetchZLyDefault(A) [[NSUserDefaults standardUserDefaults] integerForKey:A]

25.獲取圖片和版本號(hào)

#define ImageName(name)  [UIImage imageNamed:name]

#define FontSize(size) [UIFont systemFontOfSize:size]

#define VERSION (NSString *)[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

1.計(jì)算Label多行的高度

/**
 1.根據(jù)text的font和字符串自動(dòng)算出size(重點(diǎn))
 2.本身最大寬度
 MAXFLOAT:最大高度為最大浮點(diǎn)數(shù)
 **/
-(CGFloat)calculateString:(NSString *)str Width:(NSInteger)width Font:(NSInteger)font {
    CGSize size = [str boundingRectWithSize:CGSizeMake(width, 100000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:font]} context:nil].size;
    return size.height;
}

2.登錄密碼正則表達(dá)式

   NSString *regex =@"(?=.*?[a-zA-Z])(?=.*?[0-9])(?=.*?[^\\w\\s]).{8,16}";
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    // 字符串判斷芳撒,然后BOOL值
    BOOL result1 = [predicate1 evaluateWithObject:newpasswd];

3.返回指定的界面

for (UIViewController *controller in self.navigationController.viewControllers) {
if ([controller isKindOfClass:[要返回的類名 class]]) {
    [self.navigationController popToViewController:controller animated:YES];
}
}
或者dissVC
[self.presentingViewController.presentingvc dismissViewControllerAnimated:NO completion:nil];

4.獲取網(wǎng)絡(luò)運(yùn)營(yíng)商

//獲取網(wǎng)絡(luò)運(yùn)營(yíng)商
+(NSString *)CTTelephonyNetworkProviders
{
    //獲取本機(jī)運(yùn)營(yíng)商名稱
    CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
    CTCarrier *carrier = [info subscriberCellularProvider];
    //當(dāng)前手機(jī)所屬運(yùn)營(yíng)商名稱
    NSString *mobile;
    //先判斷有沒有SIM卡邓深,如果沒有則不獲取本機(jī)運(yùn)營(yíng)商
    if (!carrier.isoCountryCode) {
        //        NSLog(@"沒有SIM卡");
        mobile = @"無運(yùn)營(yíng)商";
    }else{
        mobile = [carrier carrierName];
    }
    return mobile;
}

5.NSdate 轉(zhuǎn)換(nsstring 格式)

+ (NSInteger)compareDate:(NSString*)startDate withDate:(NSString*)endDate;
/**只算小時(shí)和分鐘 HH:mm **/
+ (NSString *)dateStringWithHouseAndSecond:(NSString *)dateStr;
/* YYYY-MM-dd EEE HH:mm */
+(NSString *)dateString:(NSString *)dateStr;
/**EEE**/
+(NSString *)dateWeekString:(NSString *)dateStr;
/**MM-dd**/
+(NSString *)dateMonthAndDayString:(NSString *)dateStr;
/** yyyy-MM-dd HH:mm -----  MM-dd **/
+(NSString *)dateNewMonthAndDayString:(NSString *)dateStr;
/** yyyy-MM-dd HH:mm -----  yyyy **/
+(NSString *)dateAndYearString:(NSString *)dateStr;
/** yyyy-MM-dd HH:mm -----  yyyy-MM-dd 新增**/
+(NSString *)dateAndYearAndMonthAndDayString:(NSString *)dateStr;
/**獲取當(dāng)前時(shí)間**/
+(NSString*)getCurrentTimes;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
+(NSString *)obtainCurrentDateAndUpdateInterface:(NSString *)datestring;

/****獲取當(dāng)前的時(shí)間 YYYY-MM-dd HH:mm****/
+(NSString*)getCurrentTimesYearAndMonthAndDayAndHoursAndSecond;

//獲取當(dāng)前的時(shí)間 只展示時(shí)間HH
+(NSString*)getCurrentTimesHH;

//獲取當(dāng)前的時(shí)間 YYYY-MM-dd HH:mm:ss
+(NSString*)getCurrentTimesYYYYMMddHHmmss ;
//獲取當(dāng)前的時(shí)間 YYYY-MM-dd HH:mm --- HH:mm
+(NSString *)dateHoursAndMinuesString:(NSString *)dateStr;

+ (NSString *)getCurrentWeek;
#pragma mark 獲取當(dāng)前第一天日期(周日)
+ (NSString *)obtainCurrentDateSunday:(NSString *)sundayString;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
#pragma mark 獲取當(dāng)前第一天日期(周一)
+ (NSString *)obtainCurrentDateMonday:(NSString *)mondayString ;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
#pragma mark 獲取當(dāng)前第一天日期(周二)
+ (NSString *)obtainCurrentDateTuesday:(NSString *)TuesdayString;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
#pragma mark 獲取當(dāng)前第一天日期(周三)
+ (NSString *)obtainCurrentDateWenday:(NSString *)WendayString;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
#pragma mark 獲取當(dāng)前第一天日期(周四)
+ (NSString *)obtainCurrentDateThursday:(NSString *)ThursdayString;
/**獲取周數(shù) 周日-周六 (國(guó)外日歷)**/
#pragma mark 獲取當(dāng)前第一天日期(周五)
+ (NSString *)obtainCurrentDateFriday:(NSString *)FridayString;
#pragma mark 獲取當(dāng)前第后天日期(周六)
+ (NSString *)obtainCurrentDateSaturday:(NSString *)SaturdayString;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笔刹,隨后出現(xiàn)的幾起案子芥备,更是在濱河造成了極大的恐慌,老刑警劉巖舌菜,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌壳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袱瓮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門缤骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尺借,你說我怎么就攤上這事绊起。” “怎么了褐望?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵勒庄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瘫里,道長(zhǎng)实蔽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任谨读,我火速辦了婚禮局装,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劳殖。我一直安慰自己铐尚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布哆姻。 她就那樣靜靜地躺著宣增,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矛缨。 梳的紋絲不亂的頭發(fā)上爹脾,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音箕昭,去河邊找鬼灵妨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛落竹,可吹牛的內(nèi)容都是我干的泌霍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼述召,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼朱转!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桨武,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤肋拔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呀酸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琼梆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年性誉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窿吩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡错览,死狀恐怖纫雁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倾哺,我是刑警寧澤轧邪,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站羞海,受9級(jí)特大地震影響忌愚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜却邓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一硕糊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腊徙,春花似錦简十、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至民傻,卻和暖如春胰默,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饰潜。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工初坠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彭雾。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓碟刺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親薯酝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子半沽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 自己到現(xiàn)在畢業(yè)一年,總結(jié)了自己在前段時(shí)間開發(fā)當(dāng)中遇到的的一些細(xì)節(jié)問題吴菠,水平有限者填,希望有可以幫助大家的 1,在OC中...
    baixuancheng閱讀 654評(píng)論 0 1
  • 最近空閑做葵,想著整理一下iOS當(dāng)中的宏占哟,方便以后用的時(shí)候查找,如果小伙伴們有什么好的宏定義,歡迎在下面留言哦榨乎!與人方...
    Tomous閱讀 547評(píng)論 0 1
  • 站在前輩的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的對(duì)象...
    zysmoon閱讀 8,688評(píng)論 0 16
  • 1怎燥、改變 UITextField 占位文字 顏色和去掉底部白框 [_userName setValue:[UICo...
    i_MT閱讀 1,037評(píng)論 0 2
  • 1,NSObject中description屬性的意義蜜暑,它可以重寫嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,144評(píng)論 2 19