iOS开发 各种小功能(开发宝典)

96 阅读5分钟

**​本文已参与「新人创作礼」活动,一起开启掘金创作之路。
**

1. 判断手机号码格式是否正确,利用正则表达式验证

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

+ (BOOL)isMobileNumber:(NSString *)mobileNum

{

if (mobileNum.length != 11)

{

return NO;

}

/**

* 手机号码:

* 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]

* 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705

* 联通号段: 130,131,132,155,156,185,186,145,176,1709

* 电信号段: 133,153,180,181,189,177,1700

*/

NSString *MOBILE = @``"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70)\d{8}$"``;

/**

* 中国移动:China Mobile

* 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705

*/

NSString *CM = @``"(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\d{8}$)|(^1705\d{7}$)"``;

/**

* 中国联通:China Unicom

* 130,131,132,155,156,185,186,145,176,1709

*/

NSString *CU = @``"(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\d{8}$)|(^1709\d{7}$)"``;

/**

* 中国电信:China Telecom

* 133,153,180,181,189,177,1700

*/

NSString *CT = @``"(^1(33|53|77|8[019])\d{8}$)|(^1700\d{7}$)"``;

NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@``"SELF MATCHES %@"``, MOBILE];

NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@``"SELF MATCHES %@"``, CM];

NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@``"SELF MATCHES %@"``, CU];

NSPredicate *regextestct = [NSPredicate predicateWithFormat:@``"SELF MATCHES %@"``, CT];

if (([regextestmobile evaluateWithObject:mobileNum] == YES)

|| ([regextestcm evaluateWithObject:mobileNum] == YES)

|| ([regextestct evaluateWithObject:mobileNum] == YES)

|| ([regextestcu evaluateWithObject:mobileNum] == YES))

{

return YES;

}

else

{

return NO;

}

}

2. 判断邮箱格式是否正确,利用正则表达式验证

1

2

3

4

5

6

+ (BOOL)isAvailableEmail:(NSString *)email

{

NSString *emailRegex = @``"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"``;

NSPredicate *emailTest = [NSPredicate predicateWithFormat:@``"SELF MATCHES %@"``, emailRegex];

return [emailTest evaluateWithObject:email];

}

3. 判断字符串中是否含有空格

1

2

3

4

5

6

7

8

+ (BOOL)isHaveSpaceInString:(NSString *)string{

NSRange _range = [string rangeOfString:@``" "``];

if (_range.location != NSNotFound) {

return YES;

}``else {

return NO;

}

}

4. 判断字符串中是否含有中文

1

2

3

4

5

6

7

8

9

10

+ (BOOL)isHaveChineseInString:(NSString *)string

{

for``(NSInteger i = 0; i < [string length]; i++){

int a = [string characterAtIndex:i];

if (a > 0x4e00 && a < 0x9fff) {

return YES;

}

}

return NO;

}

5. 判断字符串是否全部为数字

+ (BOOL)isAllNum:(NSString *)string

{

unichar c;

for (int i=0; i<string.length; i++) { c=``"[string characterAtIndex:i];" if (!isdigit(c)) {=``"" return no;=``"" }=``"" }=``"" return yes;=``""``}<=``""``pre=``""``><p>判断是否是纯数字</p><pre class=``"brush:js;toolbar:false"``>+ (BOOL)isPureInteger:(NSString *)str {

NSScanner *scanner = [NSScanner scannerWithString:str];

NSInteger val;

return [scanner scanInteger:&val] && [scanner isAtEnd];

}

6. 过滤一些特殊字符 似乎只能去除头尾的特殊字符(不准)

+ (NSString *)filterSpecialWithString:(NSString *)string

{

// 定义一个特殊字符的集合

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:

@``"@/:;: ;()?「」"、[]{}#%-*+=_|~<>$?^?'@#$%^&*()_+'"``];

// 过滤字符串的特殊字符

NSString *newString = [string stringByTrimmingCharactersInSet:set];

return newString;

}

7. 让iOS应用直接退出

+ (void)backOutApp {

UIWindow *window = [[UIApplication sharedApplication].delegate window];

[UIView animateWithDuration:1.0f animations:^{

window.alpha = 0;

} completion:^(BOOL finished) {

exit(0);

}];

}

8. NSArray 快速求总和、最大值、最小值、平均值

+ (NSString *)caculateArray:(NSArray *)array

{

CGFloat sum = [[array valueForKeyPath:@``"@sum.floatValue"``] floatValue];

CGFloat avg = [[array valueForKeyPath:@``"@avg.floatValue"``] floatValue];

CGFloat max =[[array valueForKeyPath:@``"@max.floatValue"``] floatValue];

CGFloat min =[[array valueForKeyPath:@``"@min.floatValue"``] floatValue];

NSLog(@``"%fn%fn%fn%f"``,sum,avg,max,min);

return [NSString stringWithFormat:@``"%f"``,sum];

}

9. 验证身份证(本人试过,还挺准的)

+ (BOOL)checkIdentityCardNo:(NSString*)value {

value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSInteger length =0;

if (!value) {

return NO;

}``else {

length = value.length;

if (length !=15 && length !=18) {

return NO;

}

}

// 省份代码

NSArray *areasArray =@[@``"11"``,@``"12"``, @``"13"``,@``"14"``, @``"15"``,@``"21"``, @``"22"``,@``"23"``, @``"31"``,@``"32"``, @``"33"``,@``"34"``, @``"35"``,@``"36"``, @``"37"``,@``"41"``, @``"42"``,@``"43"``, @``"44"``,@``"45"``, @``"46"``,@``"50"``, @``"51"``,@``"52"``, @``"53"``,@``"54"``, @``"61"``,@``"62"``, @``"63"``,@``"64"``, @``"65"``,@``"71"``, @``"81"``,@``"82"``, @``"91"``];

NSString *valueStart2 = [value substringToIndex:2];

BOOL areaFlag =NO;

for (NSString *areaCode in areasArray) {

if ([areaCode isEqualToString:valueStart2]) {

areaFlag =YES;

break``;

}

}

if (!areaFlag) {

return false``;

}

NSRegularExpression *regularExpression;

NSUInteger numberofMatch;

NSInteger year =0;

switch (length) {

case 15:

year = [[value substringWithRange:NSMakeRange(6,2)] integerValue] +1900;

if (year %4 ==0 || (year 0 ==0 && year %4 ==0)) {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@``"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"

options:NSRegularExpressionCaseInsensitive

error:nil];``//测试出生日期的合法性

}``else {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@``"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"

options:NSRegularExpressionCaseInsensitive

error:nil];``//测试出生日期的合法性

}

numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress

range:NSMakeRange(0, value.length)];

if``(numberofMatch >0) {

return YES;

}``else {

return NO;

}

case 18:

year = [value substringWithRange:NSMakeRange(6,4)].intValue;

if (year %4 ==0 || (year 0 ==0 && year %4 ==0)) {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@``"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"

options:NSRegularExpressionCaseInsensitive error:nil];``//测试出生日期的合法性

}``else {

regularExpression = [[NSRegularExpression alloc]initWithPattern:@``"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$" options:NSRegularExpressionCaseInsensitive error:nil];``//测试出生日期的合法性

}

numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress range:NSMakeRange(0, value.length)];

if``(numberofMatch >0) {

int S = ([value substringWithRange:NSMakeRange(0,1)].intValue + [value substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([value substringWithRange:NSMakeRange(1,1)].intValue + [value substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([value substringWithRange:NSMakeRange(2,1)].intValue + [value substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([value substringWithRange:NSMakeRange(3,1)].intValue + [value substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([value substringWithRange:NSMakeRange(4,1)].intValue + [value substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([value substringWithRange:NSMakeRange(5,1)].intValue + [value substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([value substringWithRange:NSMakeRange(6,1)].intValue + [value substringWithRange:NSMakeRange(16,1)].intValue) *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;

int Y = S ;

NSString *M =@``"F"``;

NSString *JYM =@``"10X98765432"``;

M = [JYM substringWithRange:NSMakeRange(Y,1)];``// 判断校验位

if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {

return YES;``// 检测ID的校验位

}``else {

return NO;

}

}``else {

return NO;

}

default``:

return false``;

}

}

10. 设置Label里的字符有不同的颜色``//可根据自己的需求进行增删改

- (void)stringColorSet {

NSString*string = @``"如何使得Label里的字符有不同的颜色?"``;

NSRange range = [string rangeOfString: @``"Label"``];

NSMutableAttributedString*attribute = [[NSMutableAttributedString alloc] initWithString: string];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor redColor]}range: range];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor greenColor]}range: NSMakeRange(0, range.location)];

[attribute addAttributes: @{NSForegroundColorAttributeName: [UIColor cyanColor]}range: NSMakeRange(range.location+ range.length, 5)];

UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0.0f, 100.0f, 320.0f, 100.0f)];

[label setText: string];

[label setAttributedText: attribute];

}

1.磁盘总空间大小

+ (CGFloat)diskOfAllSizeMBytes

{

CGFloat size = 0.0;

NSError *error;

NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];

if (error) {

#ifdef DEBUG

NSLog(@``"error: %@"``, error.localizedDescription);

#endif

}``else``{

NSNumber *number = [dic objectForKey:NSFileSystemSize];

size = [number floatValue]/1024/1024;

}

return size;

}

2.磁盘可用空间大小

+ (CGFloat)diskOfFreeSizeMBytes

{

CGFloat size = 0.0;

NSError *error;

NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];

if (error) {

#ifdef DEBUG

NSLog(@``"error: %@"``, error.localizedDescription);

#endif

}``else``{

NSNumber *number = [dic objectForKey:NSFileSystemFreeSize];

size = [number floatValue]/1024/1024;

}

return size;

}

3.将字符串数组按照元素首字母顺序进行排序分组

+ (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array

{

if (array.count == 0) {

return nil;

}

for (id obj in array) {

if (![obj isKindOfClass:[NSString class``]]) {

return nil;

}

}

UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];

NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];

//创建27个分组数组

for (``int i = 0; i < indexedCollation.sectionTitles.count; i++) {

NSMutableArray *obj = [NSMutableArray array];

[objects addObject:obj];

}

NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count];

//按字母顺序进行分组

NSInteger lastIndex = -1;

for (``int i = 0; i < array.count; i++) {

NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];

[[objects objectAtIndex:index] addObject:array[i]];

lastIndex = index;

}

//去掉空数组

for (``int i = 0; i < objects.count; i++) {

NSMutableArray *obj = objects[i];

if (obj.count == 0) {

[objects removeObject:obj];

}

}

//获取索引字母

for (NSMutableArray *obj in objects) {

NSString *str = obj[0];

NSString *key = [self firstCharacterWithString:str];

[keys addObject:key];

}

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[dic setObject:objects forKey:keys];

return dic;

}

4.将字符串数组按照元素首字母顺序进行排序分组

+ (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array

{

if (array.count == 0) {

return nil;

}

for (id obj in array) {

if (![obj isKindOfClass:[NSString class``]]) {

return nil;

}

}

UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];

NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];

//创建27个分组数组

for (``int i = 0; i < indexedCollation.sectionTitles.count; i++) {

NSMutableArray *obj = [NSMutableArray array];

[objects addObject:obj];

}

NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count];

//按字母顺序进行分组

NSInteger lastIndex = -1;

for (``int i = 0; i < array.count; i++) {

NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];

[[objects objectAtIndex:index] addObject:array[i]];

lastIndex = index;

}

//去掉空数组

for (``int i = 0; i < objects.count; i++) {

NSMutableArray *obj = objects[i];

if (obj.count == 0) {

[objects removeObject:obj];

}

}

//获取索引字母

for (NSMutableArray *obj in objects) {

NSString *str = obj[0];

NSString *key = [self firstCharacterWithString:str];

[keys addObject:key];

}

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[dic setObject:objects forKey:keys];

return dic;

}

5.对图片进行滤镜处理

// 怀旧 --> CIPhotoEffectInstant 单色 --> CIPhotoEffectMono

// 黑白 --> CIPhotoEffectNoir 褪色 --> CIPhotoEffectFade

// 色调 --> CIPhotoEffectTonal 冲印 --> CIPhotoEffectProcess

// 岁月 --> CIPhotoEffectTransfer 铬黄 --> CIPhotoEffectChrome

// CILinearToSRGBToneCurve, CISRGBToneCurveToLinear, CIGaussianBlur, CIBoxBlur, CIDiscBlur, CISepiaTone, CIDepthOfField

+ (UIImage *)filterWithOriginalImage:(UIImage *)image filterName:(NSString *)name

{

CIContext *context = [CIContext contextWithOptions:nil];

CIImage *inputImage = [[CIImage alloc] initWithImage:image];

CIFilter *filter = [CIFilter filterWithName:name];

[filter setValue:inputImage forKey:kCIInputImageKey];

CIImage *result = [filter valueForKey:kCIOutputImageKey];

CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

UIImage *resultImage = [UIImage imageWithCGImage:cgImage];

CGImageRelease(cgImage);

return resultImage;

}

6.对图片进行模糊处理

// CIGaussianBlur ---> 高斯模糊

// CIBoxBlur ---> 均值模糊(Available in iOS 9.0 and later)

// CIDiscBlur ---> 环形卷积模糊(Available in iOS 9.0 and later)

// CIMedianFilter ---> 中值模糊, 用于消除图像噪点, 无需设置radius(Available in iOS 9.0 and later)

// CIMotionBlur ---> 运动模糊, 用于模拟相机移动拍摄时的扫尾效果(Available in iOS 9.0 and later)

+ (UIImage *)blurWithOriginalImage:(UIImage *)image

blurName:(NSString *)name

radius:(NSInteger)radius

{

CIContext *context = [CIContext contextWithOptions:nil];

CIImage *inputImage = [[CIImage alloc] initWithImage:image];

CIFilter *filter;

if (name.length != 0) {

filter = [CIFilter filterWithName:name];

[filter setValue:inputImage forKey:kCIInputImageKey];

if (![name isEqualToString:@``"CIMedianFilter"``]) {

[filter setValue:@(radius) forKey:@``"inputRadius"``];

}

CIImage *result = [filter valueForKey:kCIOutputImageKey];

CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

UIImage *resultImage = [UIImage imageWithCGImage:cgImage];

CGImageRelease(cgImage);

return resultImage;

}``else``{

return nil;

}

}

7.跳转到系统的相关界面:

/*

* 需要添加一个字段

* 蓝色的项目工程文件 -> Info -> URL Types -> 添加一个 -> 设置URL Sch**** 为 prefs的url

NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];

[[UIApplication sharedApplication] openURL:url];

跳转到其他的界面的字段(不全,详细看链接)

About — prefs:root=General&path=About

Accessibility — prefs:root=General&path=ACCESSIBILITY

AirplaneModeOn— prefs:root=AIRPLANE_MODE

Auto-Lock — prefs:root=General&path=AUTOLOCK

Brightness — prefs:root=Brightness

Bluetooth — prefs:root=General&path=Bluetooth

Date& Time — prefs:root=General&path=DATE_AND_TIME

FaceTime — prefs:root=FACETIME

General— prefs:root=General

原文链接:`[iOS 跳转到系统的设置界面 - 简书](http://www.jianshu.com/p/19602f48309b "iOS 跳转到系统的设置界面 - 简书")`

*/

8.创建一张实时模糊效果 View (毛玻璃效果)

//Avilable in iOS 8.0 and later

+ (UIVisualEffectView *)effectViewWithFrame:(CGRect)frame

{

UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];

effectView.frame = frame;

return effectView;

}

9.设置Label的行间距

+ (``void``)setLineSpaceWithString:(UILabel *)label

{

NSMutableAttributedString *attributedString =

[[NSMutableAttributedString alloc] initWithString:label.text];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:3];

//调整行间距

[attributedString addAttribute:NSParagraphStyleAttributeName

value:paragraphStyle

range:NSMakeRange(0, [label.text length])];

label.attributedText = attributedString;

}

10.让Plain风格的TableView的区头可以”不悬停”(可以直接百度搜到):

- (``void``)scrollViewDidScroll:(UIScrollView *)scrollView

{

if``(scrollView == self.myTab) {

CGFloat sectionHeaderHeight = 40;

if (scrollView.contentOffset.y=0) {

scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);

} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {

scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);

}

}

``}

[感谢原文](http://blog.csdn.net/lxlzy/article/details/51803449 "感谢原文") ``