iOS常用代码段分享

遍历可变数组的同时删除数组元素

?
1
2
3
4
5
6
7
NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; 
NSString *str1 = @“zhangsan”;
for (AddressPerson *perName in copyArray) {
   if ([[perName name] isEqualToString:str1]) {
     [array removeObject:perName];
   }
}

获取系统当前语言

?
1
2
3
4
5
6
7
8
NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
NSLog(@ "currentlanguage = %@" ,currentLanguage);
 
if ([currentLanguage containsString:@ "zh-Hans" ]) {
   NSLog(@ "zh-Hans简体中文" );
} else if ([currentLanguage containsString:@ "zh-Hant" ]) {
   NSLog(@ "zh-Hant繁体中文" );
}

UITableView的Group样式下顶部空白处理

?
1
2
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)];
self.tableView.tableHeaderView = view;

UITableView的plain样式下,取消区头停滞效果

?
1
2
3
4
5
6
7
8
9
10
11
12
- ( void )scrollViewDidScroll:(UIScrollView *)scrollView
{
   CGFloat sectionHeaderHeight = sectionHead.height;
   if (scrollView.contentOffset.y<=sectionHeaderHeight&&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);
   }
}

获取某个view所在的控制器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (UIViewController *)viewController
{
  UIViewController *viewController = nil;
  UIResponder *next = self.nextResponder;
  while (next)
  {
   if ([next isKindOfClass:[UIViewController class ]])
   {
    viewController = (UIViewController *)next;  
    break
  
   next = next.nextResponder;
  }
   return viewController;
}
 

两种方法删除NSUserDefaults所有记录

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//方法一
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
 
 
//方法二
- ( void )resetDefaults
{
   NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
   NSDictionary * dict = [defs dictionaryRepresentation];
   for (id key in dict)
   {
     [defs removeObjectForKey:key];
   }
   [defs synchronize];
}
 

打印系统所有已注册的字体名称

?
1
2
3
4
5
6
7
8
9
10
11
12
void enumerateFonts()
{
   for (NSString *familyName in [UIFont familyNames])
   {
     NSLog(@ "%@" ,familyName);       
     NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];   
     for (NSString *fontName in fontNames)
     {
       NSLog(@ "\t|- %@" ,fontName);
     }
   }
}

获取图片某一点的颜色

?
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
- (UIColor*) getPixelColorAtLocation:(CGPoint)point inImage:(UIImage *)image
{
 
   UIColor* color = nil;
   CGImageRef inImage = image.CGImage;
   CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
 
   if (cgctx == NULL) {
     return nil; /* error */
   }
   size_t w = CGImageGetWidth(inImage);
   size_t h = CGImageGetHeight(inImage);
   CGRect rect = {{0,0},{w,h}};
 
   CGContextDrawImage(cgctx, rect, inImage);
   unsigned char * data = CGBitmapContextGetData (cgctx);
   if (data != NULL) {
     int offset = 4*((w*round(point.y))+round(point.x));
     int alpha = data[offset];
     int red = data[offset+1];
     int green = data[offset+2];
     int blue = data[offset+3];
     color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:
          (blue/255.0f) alpha:(alpha/255.0f)];
   }
   CGContextRelease(cgctx);
   if (data) {
     free (data);
   }
   return color;
}

字符串反转

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//第一种:
- (NSString *)reverseWordsInString:(NSString *)str
   NSMutableString *newString = [[NSMutableString alloc] initWithCapacity:str.length];
   for (NSInteger i = str.length - 1; i >= 0 ; i --)
   {
     unichar ch = [str characterAtIndex:i];   
     [newString appendFormat:@ "%c" , ch]; 
  
    return newString;
}
 
//第二种:
- (NSString*)reverseWordsInString:(NSString*)str
    NSMutableString *reverString = [NSMutableString stringWithCapacity:str.length]; 
    [str enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
      [reverString appendString:substring];            
    }]; 
    return reverString;
}

禁止锁屏

?
1
2
3
4
//第一种
[UIApplication sharedApplication].idleTimerDisabled = YES;
//第二种
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

 模态推出透明界面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
UIViewController *vc = [[UIViewController alloc] init];
UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:vc];
 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
    na.modalPresentationStyle = UIModalPresentationOverCurrentContext;
}
else
{
    self.modalPresentationStyle=UIModalPresentationCurrentContext;
}
 
[self presentViewController:na animated:YES completion:nil];

iOS跳转到App Store下载应用评分

?
1
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@ "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APPID" ]];
 

手动更改iOS状态栏的颜色

?
1
2
3
4
5
6
7
8
9
- ( void )setStatusBarBackgroundColor:(UIColor *)color
{
   UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@ "statusBarWindow" ] valueForKey:@ "statusBar" ];
 
   if ([statusBar respondsToSelector:@selector(setBackgroundColor:)])
   {
     statusBar.backgroundColor = color; 
   }
}

判断当前ViewController是push还是present的方式显示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NSArray *viewcontrollers=self.navigationController.viewControllers;
 
if (viewcontrollers.count > 1)
{
   if ([viewcontrollers objectAtIndex:viewcontrollers.count - 1] == self)
   {
     //push方式
     [self.navigationController popViewControllerAnimated:YES];
   }
}
else
{
   //present方式
   [self dismissViewControllerAnimated:YES completion:nil];
}
 

获取实际使用的LaunchImage图片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (NSString *)getLaunchImageName
{
   CGSize viewSize = self.window.bounds.size;
   // 竖屏 
   NSString *viewOrientation = @ "Portrait" ;
   NSString *launchImageName = nil; 
   NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@ "UILaunchImages" ];
   for (NSDictionary* dict in imagesDict)
   {
     CGSize imageSize = CGSizeFromString(dict[@ "UILaunchImageSize" ]);
     if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@ "UILaunchImageOrientation" ]])
     {
       launchImageName = dict[@ "UILaunchImageName" ];   
    
  
   return launchImageName;
}

iOS在当前屏幕获取第一响应

?
1
2
UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView * firstResponder = [keyWindow performSelector:@selector(firstResponder)];
 

判断对象是否遵循了某协议

?
1
2
3
4
if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)])
{
    [self.selectedController performSelector:@selector(onTriggerRefresh)];
}
 

判断view是不是指定视图的子视图
BOOL isView = [textView isDescendantOfView:self.view]; 

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

?
1
2
3
4
5
6
NSArray *array = [NSArray arrayWithObjects:@ "2.0" , @ "2.3" , @ "3.0" , @ "4.0" , @ "10" , nil];
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(@ "%f\n%f\n%f\n%f" ,sum,avg,max,min);
 

修改UITextField中Placeholder的文字颜色
[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; 

获取一个类的所有子类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+ (NSArray *) allSubclasses
{
   Class myClass = [self class ];
   NSMutableArray *mySubclasses = [NSMutableArray array];
   unsigned int numOfClasses;
   Class *classes = objc_copyClassList(&numOfClasses;);
   for (unsigned int ci = 0; ci < numOfClasses; ci++)
   {
     Class superClass = classes[ci];
     do {
       superClass = class_getSuperclass(superClass);
     } while (superClass && superClass != myClass);
 
     if (superClass)
     {
       [mySubclasses addObject: classes[ci]];
     }
   }
   free (classes);
   return mySubclasses;
}

阿拉伯数字转中文格式

?
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
+(NSString *)translation:(NSString *)arebic
{
   NSString *str = arebic;
   NSArray *arabic_numerals = @[@ "1" ,@ "2" ,@ "3" ,@ "4" ,@ "5" ,@ "6" ,@ "7" ,@ "8" ,@ "9" ,@ "0" ];
   NSArray *chinese_numerals = @[@ "一" ,@ "二" ,@ "三" ,@ "四" ,@ "五" ,@ "六" ,@ "七" ,@ "八" ,@ "九" ,@ "零" ];
   NSArray *digits = @[@ "个" ,@ "十" ,@ "百" ,@ "千" ,@ "万" ,@ "十" ,@ "百" ,@ "千" ,@ "亿" ,@ "十" ,@ "百" ,@ "千" ,@ "兆" ];
   NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:chinese_numerals forKeys:arabic_numerals];
 
   NSMutableArray *sums = [NSMutableArray array];
   for ( int i = 0; i < str.length; i ++) {
     NSString *substr = [str substringWithRange:NSMakeRange(i, 1)];
     NSString *a = [dictionary objectForKey:substr];
     NSString *b = digits[str.length -i-1];
     NSString *sum = [a stringByAppendingString:b];
     if ([a isEqualToString:chinese_numerals[9]])
     {
       if ([b isEqualToString:digits[4]] || [b isEqualToString:digits[8]])
       {
         sum = b;
         if ([[sums lastObject] isEqualToString:chinese_numerals[9]])
         {
           [sums removeLastObject];
         }
       } else
       {
         sum = chinese_numerals[9];
       }
 
       if ([[sums lastObject] isEqualToString:sum])
       {
         continue ;
       }
     }
 
     [sums addObject:sum];
   }
 
   NSString *sumStr = [sums componentsJoinedByString:@ "" ];
   NSString *chinese = [sumStr substringToIndex:sumStr.length-1];
   NSLog(@ "%@" ,str);
   NSLog(@ "%@" ,chinese);
   return chinese;
}
 

取消UICollectionView的隐式动画

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//方法一
[UIView performWithoutAnimation:^{
   [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
}];
 
//方法二
[UIView animateWithDuration:0 animations:^{
   [collectionView performBatchUpdates:^{
     [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
   } completion:nil];
}];
 
//方法三
[UIView setAnimationsEnabled:NO];
[self.trackPanel performBatchUpdates:^{
   [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
} completion:^( BOOL finished) {
   [UIView setAnimationsEnabled:YES];
}];

判断邮箱格式是否正确的代码

?
1
2
3
4
5
6
7
8
9
10
11
-( BOOL )isValidateEmail:(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];
 
  }

iOS中UITextField的字数限制

?
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
//在viewDidLoad中注册<UITextFieldTextDidChangeNotification>通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
      name:@ "UITextFieldTextDidChangeNotification" object:myTextField];
//实现监听方法
#pragma mark - Notification Method
-( void )textFieldEditChanged:(NSNotification *)obj
{
   UITextField *textField = (UITextField *)obj.object;
   NSString *toBeString = textField.text;
 
   //获取高亮部分
   UITextRange *selectedRange = [textField markedTextRange];
   UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
 
   // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
   if (!position)
   {
     if (toBeString.length > MAX_STARWORDS_LENGTH)
     {
       NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
       if (rangeIndex.length == 1)
       {
         textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
       }
       else
       {
         NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
         textField.text = [toBeString substringWithRange:rangeRange];
       }
     }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值