• iOS开发常用代码块


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

    NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array];   
    NSString *str1 = @“zhangsan”;  
    for (AddressPerson *perName in copyArray) {  
        if ([[perName name] isEqualToString:str1]) {  
            [array removeObject:perName];  
       }  
    } 

    获取系统当前语言

    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样式下顶部空白处理

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

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

    - (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所在的控制器

    - (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所有记录

    //方法一
    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];
    }

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

    void enumerateFonts()
    {
        for(NSString *familyName in [UIFont familyNames])
       {
            NSLog(@"%@",familyName);               
            NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];       
            for(NSString *fontName in fontNames)
           {
                NSLog(@"\t|- %@",fontName);
           }
       }
    }

    获取图片某一点的颜色

    - (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;
    }

    字符串反转

    //第一种:
    - (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;
    }

    禁止锁屏

    //第一种
    [UIApplication sharedApplication].idleTimerDisabled = YES;
    //第二种
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

    模态推出透明界面

    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下载应用评分

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

    手动更改iOS状态栏的颜色

    - (void)setStatusBarBackgroundColor:(UIColor *)color
    {
        UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    
        if ([statusBar respondsToSelector:@selector(setBackgroundColor:)])
        {
            statusBar.backgroundColor = color;    
        }
    }

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

    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图片

    - (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在当前屏幕获取第一响应

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

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

    if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)])
    {
         [self.selectedController performSelector:@selector(onTriggerRefresh)];
    }

    判断view是不是指定视图的子视图

    BOOL isView = [textView isDescendantOfView:self.view];

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

    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"];

    获取一个类的所有子类

    + (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;
    }

    阿拉伯数字转中文格式

    +(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的隐式动画

    //方法一
    [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];
    }];

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

    -(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的字数限制

    //在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];
                }
            }
        }
    }

    小伙伴们,今天就分享到这里,下期更精彩!

  • 相关阅读:
    一道有意思的面试算法题
    你真的了解回流和重绘吗
    一道面试题引起的思考
    手把手教你实现一个引导动画
    你可能不知道的setInterval的坑
    不到50行代码实现一个能对请求并发数做限制的通用RequestDecorator
    使用装饰者模式做有趣的事情
    广告
    vue运行svg文件
    el-table表格样式设置方法 :cell-class-name
  • 原文地址:https://www.cnblogs.com/tylerzhang/p/5937616.html
Copyright © 2020-2023  润新知