iOS 常用Category類別分享 字數1340 閱讀86 評論2 喜歡8
前言
各位都知道,類別是一種為現有的類添加新方法的方式,利用Objective-C的動態運行時分配機制,可以為現有的類添加新方法,這種為現有的類添加新方法的方式稱為類別catagory,他可以為任何類添加新的方法,包括那些沒有原始碼的類。類別使得無需建立對象類的子類就能完成同樣的工作。
有許多小技術點靠類別直接實現,從而節約時間將精力花在更重要的開發工作單位上,現在我來分享一下我從事iOS開發以來積累的Category。 第一部分 NSString、NSAttributedString NSString包括:
1.png 1.NSString+Category:
一些NSString常規內容
//電話號碼中間4位****顯示+ (NSString*) getSecrectStringWithPhoneNumber:(NSString*)phoneNum;//銀行卡號中間8位顯示+ (NSString*) getSecrectStringWithAccountNo:(NSString*)accountNo;//計算文字高度- (CGFloat ) heightWithFontSize:(CGFloat)fontSize width:(CGFloat)width;/**抹除運費小數末尾的0*/- (NSString *) removeUnwantedZero;//去掉前後空格- (NSString *) trimmedString;//Data類型轉換為Base64+ (NSString *)base64StringFromData:(NSData *)data length:(NSUInteger)length;//電話格式+ (NSString*) stringMobileFormat:(NSString*)mobile;//數組中文格式(幾萬)可自行添加+ (NSString*) stringChineseFormat:(double)value;
2.NSString+Predicate:
常用的Regex判斷
//有效電話號碼- (BOOL) isValidMobileNumber;//有效真實姓名- (BOOL) isValidRealName;//是否只有中文- (BOOL) isOnlyChinese;//有效驗證碼(根據自家的驗證碼位元進行修改)- (BOOL) isValidVerifyCode;//有效銀行卡號- (BOOL) isValidBankCardNumber;//有效郵箱- (BOOL) isValidEmail;//有效字母數字密碼- (BOOL) isValidAlphaNumberPassword;//檢測有效身份證//15位- (BOOL) isValidIdentifyFifteen;//18位- (BOOL) isValidIdentifyEighteen;//限制只能輸入數字- (BOOL) isOnlyNumber;
3.NSString+DisplayTime:
從時間戳記轉為顯示時間
//通過時間戳記計算時間差(幾小時前、幾天前)+ (NSString *) compareCurrentTime:(NSTimeInterval) compareDate;//通過時間戳記得出顯示時間+ (NSString *) getDateStringWithTimestamp:(NSTimeInterval)timestamp;//通過時間戳記和格式顯示時間+ (NSString *) getStringWithTimestamp:(NSTimeInterval)timestamp formatter:(NSString*)formatter;
NSAttributedString包括:
2.png
富文本高度、文字與圖片混合的富文本
//由於系統計算富文本的高度不正確,自己寫了方法- (CGFloat)heightWithContainWidth:(CGFloat)width;//直接返回NSAttributedString+ (NSAttributedString *)attributeStringWithPrefixString:(NSString *)prefixString suffixString:(NSString *)suffixString;/** * 直接返回NSAttributedString * * @param prefixString 前面的string * @param prefixFont 字型大小 * @param prefixColor 字型顏色 * @param suffixString 後面拼接的string * @param suffixFont 字型大小 * @param suffixColor 字型顏色 * * @return 直接返回NSAttributedString */+ (NSAttributedString *)attributeStringWithPrefixString:(NSString *)prefixString prefixFont:(CGFloat)prefixFont prefixColor:(UInt32)prefixColor suffixString:(NSString *)suffixString suffixFont:(CGFloat)suffixFont suffixColor:(UInt32)suffixColor;// string在前 圖片在後+ (NSMutableAttributedString *)attributeStringWithPrefixString:(NSString *)prefixString subffixImageName:(NSString *)subffixImageName;//圖片在前 string在後+ (NSMutableAttributedString *)attributeStringWithSubffixString:(NSString *)subffixString prefixImageName:(NSString *)prefixImageName;
第二部分 NSArray,NSDictionary
這一塊內容主要是防止nil而發生閃退的情況,可變和不可變的各種遇到nil而閃退的情況都有實現 NSArray、NSMutableArray
@interface NSArray (Category)//以下寫法均防止閃退+ (instancetype)safeArrayWithObject:(id)object;- (id)safeObjectAtIndex:(NSUInteger)index;- (NSArray *)safeSubarrayWithRange:(NSRange)range;- (NSUInteger)safeIndexOfObject:(id)anObject;//通過Plist名取到Plist檔案中的數組+ (NSArray *)arrayNamed:(NSString *)name;// 數組轉成json 字串- (NSString *)toJSONStringForArray;@end@interface NSMutableArray (Category)//以下寫法均防止閃退- (void)safeAddObject:(id)object;- (void)safeInsertObject:(id)object atIndex:(NSUInteger)index;- (void)safeInsertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexs;- (void)safeRemoveObjectAtIndex:(NSUInteger)index;- (void)safeRemoveObjectsInRange:(NSRange)range;@end
NSDictionary、NSMutableDictionary
@interface NSDictionary (Category)//用於資料解析,返回對象為字串或實值型別,數組和字典不要用此方法- (id)safeObjectForKey:(NSString *)key;//設定索引值對 針對對象為空白處理- (void)safeSetObject:(id)object forKey:(id)key;- (id)objectForKeyCustom:(id)aKey;- (id)safeKeyForValue:(id)value;/** * 欄位轉成json的字串 * * @return json 字串 */- (NSString *)toJSONStringForDictionary;@end@interface NSMutableDictionary (Category)- (void)safeSetObject:(id)aObj forKey:(id<NSCopying>)aKey;- (id)safeObjectForKey:(id<NSCopying>)aKey;@end
第三部分 UIView、UIImage、UIButton
UIView
//UIMotionEffect和Home頁背景視差效果- (void) addCenterMotionEffectsXYWithOffset:(CGFloat)offset;//把View加在Window上- (void) addToWindow;//View截圖- (UIImage*) screenshot;//ScrollView截圖 contentOffset- (UIImage*) screenshotForScrollViewWithContentOffset:(CGPoint)contentOffset;//View按Rect截圖- (UIImage*) screenshotInFrame:(CGRect)frame;
UIImage,這裡內容很多我只列出一部分,具體的大家可以down或者clone下來之後仔細看
//由顏色產生圖片+ (UIImage *) imageWithColor:(UIColor*)color;//將圖片剪裁至目尺規寸+ (UIImage *) imageByScalingAndCroppingForSourceImage:(UIImage *)sourceImage targetSize:(CGSize)targetSize;//圖片旋轉角度- (UIImage *) imageRotatedByDegrees:(CGFloat)degrees;//展開圖片UIEdgeInsets- (UIImage *) resizableImage:(UIEdgeInsets)insets;//展開圖片CGFloat- (UIImage *) imageByResizeToScale:(CGFloat)scale;//放大圖片CGSize- (UIImage *) imageByResizeWithMaxSize:(CGSize)size;//小樣圖圖片CGSize- (UIImage *) imageWithThumbnailForSize:(CGSize)size;//通過Rect剪裁圖片- (UIImage *) imageByCropToRect:(CGRect)rect;
UIButton,擴大點擊範圍,非常有用的一個方法,大力推薦
- (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left;
總結
這邊把一些常用的類別給大家列舉了一些,其實在GitHub上的項目裡還有很多其他類別,大家可以仔細研究下,畢竟App有很多功能是共同,基本每個方法都是我因為某些需求寫的、還有部分是網上找的。如果不會使用可以來詢問我,第一次寫分享的文章,不喜勿噴。謝謝
以後我還會持續更新的。最後放出傳送門。。麻煩下載的同學給點個星或者點個贊 ~(≧▽≦)/~ 謝謝啦。 下載地址
Git下載地址