iOS开发小技巧总结(转载)

1.打印 View 所有子视图:

po [[self view]recursiveDescription]

2.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];

3.播放声音:

//  1. 获取音效资源的路径
 NSString *path = [[NSBundle mainBundle]pathForResource:@"pour_milk" ofType:@"wav"];
 //  2. 将路劲转化为 url
 NSURL *tempUrl = [NSURL fileURLWithPath:path];
 //  3. 用转化成的 url 创建一个播放器
 NSError *error = nil;
 AVAudioPlayer *play = [[AVAudioPlayer alloc]initWithContentsOfURL:tempUrl error:&error];
 self.player = play;
 //  4. 播放
 [play play];

4.修改 UITextField 中 Placeholder 的文字颜色:

[text setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

5.判断 view 是不是指定视图的子视图:

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

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

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

7.系统键盘通知消息:

1、UIKeyboardWillShowNotification- 将要弹出键盘
2、UIKeyboardDidShowNotification- 显示键盘
3、UIKeyboardWillHideNotification- 将要隐藏键盘
4、UIKeyboardDidHideNotification- 键盘已经隐藏
5、UIKeyboardWillChangeFrameNotification- 键盘将要改变 frame
6、UIKeyboardDidChangeFrameNotification- 键盘已经改变 frame

8.关闭 navigationController 的滑动返回手势:

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

9.设置状态栏背景为任意的颜色:

-(void)setStatusColor
{
    UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
    statusBarView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:statusBarView];
}

10.Label 行间距:

-(void)test
{
    NSMutableAttributedString *attributedString =
   [[NSMutableAttributedString alloc] initWithString:self.contentLabel.text];
    NSMutableParagraphStyle *paragraphStyle =  [[NSMutableParagraphStyle alloc] init];
   [paragraphStyle setLineSpacing:3];

    // 调整行间距
   [attributedString addAttribute:NSParagraphStyleAttributeName
                         value:paragraphStyle
                         range:NSMakeRange(0, [self.contentLabel.text length])];
     self.contentLabel.attributedText = attributedString;
}

11.UIImageView 填充模式:

@"UIViewContentModeScaleToFill",      // 拉伸自适应填满整个视图
@"UIViewContentModeScaleAspectFit",   // 自适应比例大小显示
@"UIViewContentModeScaleAspectFill",  // 原始大小显示
@"UIViewContentModeRedraw",           // 尺寸改变时重绘
@"UIViewContentModeCenter",           // 中间
@"UIViewContentModeTop",              // 顶部
@"UIViewContentModeBottom",           // 底部
@"UIViewContentModeLeft",             // 中间贴左
@"UIViewContentModeRight",            // 中间贴右
@"UIViewContentModeTopLeft",          // 贴左上
@"UIViewContentModeTopRight",         // 贴右上
@"UIViewContentModeBottomLeft",       // 贴左下
@"UIViewContentModeBottomRight",      // 贴右下

12.iOS 中的一些手势:

轻击手势(TapGestureRecognizer)
轻扫手势(SwipeGestureRecognizer)
长按手势(LongPressGestureRecognizer)
拖动手势(PanGestureRecognizer)
捏合手势(PinchGestureRecognizer)
旋转手势(RotationGestureRecognizer)

13.字符串去除所有的空格:

[str stringByReplacingOccurrencesOfString:@" " withString:@""]

14.字符串去除首尾的空格:

[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

15.数组的排序(升序、降序及乱序):

#pragma mark -- 数组排序方法(升序)
- (void)arraySortASC {

//定义一个数字数组
//    NSArray *array = @[@"B",@"E",@"A",@"D",@"C"];
//对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2
    return [obj1 compare:obj2]; //升序
}];
NSLog(@"result=%@",result);
}

#pragma mark -- 数组排序方法(降序)
- (void)arraySortDESC{
//定义一个数字数组
NSArray *array = @[@(3),@(4),@(2),@(1)];
//对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2
    return [obj2 compare:obj1]; //降序
}];
NSLog(@"result=%@",result);
}

#pragma mark -- 数组排序方法(乱序)
- (void)arraySortBreak{
//定义一个数字数组
NSArray *array = @[@(3),@(4),@(2),@(1),@(5),@(6),@(0)];
//对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSLog(@"%@~%@",obj1,obj2);
    //乱序
    if (arc4random_uniform(2) == 0) {
        return [obj2 compare:obj1]; //降序
    }
    else{
        return [obj1 compare:obj2]; //升序
    }
}];
NSLog(@"result=%@",result);
}

16.解决ios11的下移问题:

//解决ios11的下移问题
if ([_YDHomeTableView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) 
{  
    if (@available(iOS 11.0, *)) 
    {          
      _YDHomeTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } 
    else  {}   
}

17.获取子视图所在的父视图:

-(UIViewController *)getViewController
{
    UIViewController *VC = nil;
    UIResponder *responder = self.nextResponder;
    while (responder) {
        if ([responder isKindOfClass:[UIViewController class]]) {
            VC = (UIViewController *)responder;
            break;
        }
        responder = responder.nextResponder;
    }
    return VC;
}

18.iOS获取汉字的拼音:

+(NSString *)transform:(NSString *)chinese
{    
    //将NSString装换成NSMutableString 
    NSMutableString *pinyin = [chinese mutableCopy];    
    //将汉字转换为拼音(带音标)    
    CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO);    
    NSLog(@"%@", pinyin);    
    //去掉拼音的音标    
    CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripCombiningMarks, NO);    
    NSLog(@"%@", pinyin);    
    //返回最近结果    
    return pinyin;
 }

19.改变UITableViewHeaderFooterView的背景色:

-(instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithReuseIdentifier:reuseIdentifier];
    if (self) {
        [self.contentView setBackgroundColor:[[UIColor whiteColor] colorWithAlphaComponent:0.5]];
        self.backgroundView = ({
            UIView * view = [[UIView alloc] initWithFrame:self.bounds];
            view.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.5];
            view;
        });
    }
    return self;
}

20.Base64编码与NSString对象或NSData对象的转换:

// Create NSData object
NSData *nsdata = [@"iOS Developer Tips encoded in Base64"
  dataUsingEncoding:NSUTF8StringEncoding];

// Get NSString from NSData object in Base64
NSString *base64Encoded = [nsdata base64EncodedStringWithOptions:0];

// Print the Base64 encoded string
NSLog(@"Encoded: %@", base64Encoded);

// Let's go the other way...

// NSData from the Base64 encoded str
NSData *nsdataFromBase64String = [[NSData alloc]
  initWithBase64EncodedString:base64Encoded options:0];

// Decoded NSString from the NSData
NSString *base64Decoded = [[NSString alloc]
  initWithData:nsdataFromBase64String encoding:NSUTF8StringEncoding];
NSLog(@"Decoded: %@", base64Decoded);

21.UIImage 占用内存大小:

UIImage *image = [UIImage imageNamed:@"aa"];
NSUInteger size  = CGImageGetHeight(image.CGImage) * CGImageGetBytesPerRow(image.CGImage);

22.GCD timer定时器:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(timer, ^{
    //@"倒计时结束,关闭"
    dispatch_source_cancel(timer); 
    dispatch_async(dispatch_get_main_queue(), ^{
    });
});
dispatch_resume(timer);

23.计算文件大小:

//文件大小
- (long long)fileSizeAtPath:(NSString *)path
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:path])
    {
        long long size = [fileManager attributesOfItemAtPath:path error:nil].fileSize;
        return size;
    }
    return 0;
}

//文件夹大小
- (long long)folderSizeAtPath:(NSString *)path
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    long long folderSize = 0;
    if ([fileManager fileExistsAtPath:path])
    {
        NSArray *childerFiles = [fileManager subpathsAtPath:path];
        for (NSString *fileName in childerFiles)
        {
            NSString *fileAbsolutePath = [path stringByAppendingPathComponent:fileName];
            if ([fileManager fileExistsAtPath:fileAbsolutePath])
            {
                long long size = [fileManager attributesOfItemAtPath:fileAbsolutePath error:nil].fileSize;
                folderSize += size;
            }
        }
    }
    return folderSize;
}

24.字符串中是否含有中文:

+(BOOL)checkIsChinese:(NSString *)string
{
    for (int i=0; i<string.length; i++)
    {
        unichar ch = [string characterAtIndex:i];
        if (0x4E00 <= ch  && ch <= 0x9FA5)
        {
            return YES;
        }
    }
    return NO;
}

25.禁止手机睡眠:

[UIApplication sharedApplication].idleTimerDisabled = YES;

26.去除数组中重复的对象:

NSArray *newArr = [oldArr valueForKeyPath:@"distinctUnionOfObjects.self"];

27.给view截图:

UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

28.获取window的方法:

+(UIWindow*)getWindow 
{
    UIWindow* win = nil; //[UIApplication sharedApplication].keyWindow;
    for (id item in [UIApplication sharedApplication].windows) {
        if ([item class] == [UIWindow class]) {
            if (!((UIWindow*)item).hidden) {
                win = item;
                break;
            }
        }
    }
    return win;
}

29.获取app缓存大小:

-(CGFloat)getCachSize 
{
    NSUInteger imageCacheSize = [[SDImageCache sharedImageCache] getSize];
    //获取自定义缓存大小
    //用枚举器遍历 一个文件夹的内容
    //1.获取 文件夹枚举器
    NSString *myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:myCachePath];
    __block NSUInteger count = 0;
    //2.遍历
    for (NSString *fileName in enumerator) {
        NSString *path = [myCachePath stringByAppendingPathComponent:fileName];
        NSDictionary *fileDict = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
        count += fileDict.fileSize;//自定义所有缓存大小
    }
    // 得到是字节  转化为M
    CGFloat totalSize = ((CGFloat)imageCacheSize+count)/1024/1024;
    return totalSize;
}

30.清理app缓存:

- (void)handleClearView 
{
    //删除两部分
    //1.删除 sd 图片缓存
    //先清除内存中的图片缓存
    [[SDImageCache sharedImageCache] clearMemory];
    //清除磁盘的缓存
    [[SDImageCache sharedImageCache] clearDisk];
    //2.删除自己缓存
    NSString *myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    [[NSFileManager defaultManager] removeItemAtPath:myCachePath error:nil];
}

31.判断图片类型:

//通过图片Data数据第一个字节 来获取图片扩展名
-(NSString *)contentTypeForImageData:(NSData *)data
{
    uint8_t c;
    [data getBytes:&c length:1];
    switch (c)
    {
        case 0xFF:
            return @"jpeg";
        case 0x89:
            return @"png";
        case 0x47:
            return @"gif";
        case 0x49:
        case 0x4D:
            return @"tiff";
        case 0x52:
        if ([data length] < 12) {
            return nil;
        }
        NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
        if ([testString hasPrefix:@"RIFF"]
            && [testString hasSuffix:@"WEBP"])
        {
            return @"webp";
        }
        return nil;
    }
    return nil;
}

32.圆形图片:

-(instancetype)circleImage
{
    // 开启图形上下文
    UIGraphicsBeginImageContext(self.size);
    // 获得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    // 矩形框
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    // 添加一个圆
    CGContextAddEllipseInRect(ctx, rect);
    // 裁剪(裁剪成刚才添加的图形形状)
    CGContextClip(ctx);
    // 往圆上面画一张图片
    [self drawInRect:rect];
    // 获得上下文中的图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    // 关闭图形上下文
    UIGraphicsEndImageContext();
    return image;
}

33.验证身份证号:

-(BOOL)validateIdentityCard 
{
    BOOL flag;
    if (self.length <= 0) 
    {
        flag = NO;
        return flag;
    }
    NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
    return [identityCardPredicate evaluateWithObject:self];
}

34.给imageView添加倒影:

CGRect frame = self.frame;
frame.origin.y += (frame.size.height + 1);

UIImageView *reflectionImageView = [[UIImageView alloc] initWithFrame:frame];
self.clipsToBounds = TRUE;
reflectionImageView.contentMode = self.contentMode;
[reflectionImageView setImage:self.image];
reflectionImageView.transform = CGAffineTransformMakeScale(1.0, -1.0);

CALayer *reflectionLayer = [reflectionImageView layer];

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.bounds = reflectionLayer.bounds;
gradientLayer.position = CGPointMake(reflectionLayer.bounds.size.width / 2, reflectionLayer.bounds.size.height * 0.5);
gradientLayer.colors = [NSArray arrayWithObjects:
                        (id)[[UIColor clearColor] CGColor],
                        (id)[[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.3] CGColor], nil];

gradientLayer.startPoint = CGPointMake(0.5,0.5);
gradientLayer.endPoint = CGPointMake(0.5,1.0);
reflectionLayer.mask = gradientLayer;

[self.superview addSubview:reflectionImageView];

35.获取视频的第一帧图片:

NSURL *url = [NSURL URLWithString:filepath];
AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];
return one;

36.删除UIButton的所有点击事件:

[testButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];

37.删除某个view所有的子视图:

[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

38.UITextView中打开或禁用复制,剪切,选择,全选等功能:

// 继承UITextView重写这个方法
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
// 返回NO为禁用,YES为开启
    // 粘贴
    if (action == @selector(paste:)) return NO;
    // 剪切
    if (action == @selector(cut:)) return NO;
    // 复制
    if (action == @selector(copy:)) return NO;
    // 选择
    if (action == @selector(select:)) return NO;
    // 选中全部
    if (action == @selector(selectAll:)) return NO;
    // 删除
    if (action == @selector(delete:)) return NO;
    // 分享
    if (action == @selector(share)) return NO;
    return [super canPerformAction:action withSender:sender];
}

39.字符串反转:

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

40.UIView设置部分圆角(左上,右上,左下,右下):

CGRect rect = view.bounds;
CGSize radio = CGSizeMake(30, 30);//圆角尺寸
UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;//这是圆角位置
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
masklayer.frame = view.bounds;
masklayer.path = path.CGPath;//设置路径
view.layer.mask = masklayer;

41.禁用emoji:

- (NSString *)disable_emoji:(NSString *)text
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
    NSString *modifiedString = [regex stringByReplacingMatchesInString:text options:0 range:NSMakeRange(0, [text length]) withTemplate:@""];
    return modifiedString;
}

42.UIAlertController颜色字号更改:

NSMutableAttributedString *attTitle = [[NSMutableAttributedString alloc]initWithString:@"标题1" attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:[UIFont systemFontOfSize:17]}];
NSMutableAttributedString *attMessage = [[NSMutableAttributedString alloc]initWithString:@"message" attributes:@{NSForegroundColorAttributeName:[UIColor purpleColor],NSFontAttributeName:[UIFont systemFontOfSize:14]}];

UIAlertController *action = [UIAlertController alertControllerWithTitle:@"标题1" message:@"message" preferredStyle:UIAlertControllerStyleActionSheet];
[action setValue:attTitle forKey:@"attributedTitle"];
[action setValue:attMessage forKey:@"attributedMessage"];

UIAlertAction *alert1 = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    [self loadCamera];
}];
[alert1 setValue:[UIColor cyanColor] forKey:@"titleTextColor"];
[action addAction:alert1];

UIAlertAction *alert2 = [UIAlertAction actionWithTitle:@"从相册选择照片" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    [self loadPhotoLibraryPhoto];
}];
[alert2 setValue:[UIColor brownColor] forKey:@"titleTextColor"];
[action addAction:alert2];

UIAlertAction *cancelAlert = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
[cancelAlert setValue:[UIColor redColor] forKey:@"titleTextColor"];
[action addAction:cancelAlert];
[self presentViewController:action animated:YES completion:nil];

43.UILabel下划线:

UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 120, 200, 30)];
testLabel.backgroundColor = [UIColor lightGrayColor];
testLabel.textAlignment = NSTextAlignmentCenter;
NSString *cstrTitle = @"This is an attributed string.下划线";
NSDictionary *attribtDic = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]};
NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString:cstrTitle attributes:attribtDic];
testLabel.attributedText = attribtStr;
[self.view addSubview:testLabel];

44.view添加虚线边框:

CAShapeLayer *border = [CAShapeLayer layer];
border.strokeColor = [UIColor colorWithRed:67/255.0f green:37/255.0f blue:83/255.0f alpha:1].CGColor;
border.fillColor = nil;
border.lineDashPattern = @[@4, @2];
border.path = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;
border.frame = view.bounds;
[view.layer addSublayer:border];

45.UIImage和base64互转:

-(NSString *)encodeToBase64String:(UIImage *)image {
 return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
 
-(UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
  NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  return [UIImage imageWithData:data];
}

46.UILabel显示不同颜色字体和行间距:

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:label.text];
//行间距
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:20];
[attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, label.text.length)];
//不同颜色
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
label.attributedText = attrString;

47.判断一个字符串是否为数字:

NSString *testString = @"123wo";
NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([testString rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{
    // 是数字
} else
{
    // 不是数字
}

48.获取当前导航控制器下前一个控制器:

-(UIViewController *)backViewController
{
    NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self];
 
    if ( myIndex != 0 && myIndex != NSNotFound ) {
        return [self.navigationController.viewControllers objectAtIndex:myIndex-1];
    } else {
        return nil;
    }
}

49.让导航控制器pop回指定的控制器:

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *subVC in allViewControllers) {
    if ([subVC isKindOfClass:[CommunityViewController class]]) {
        [self.navigationController popToViewController:subVC animated:NO];
    }
}

50.UIWebView添加单击手势不响应:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewClick)];
tap.delegate = self;
[self.webView addGestureRecognizer:tap];
//因为webView本身有一个单击手势,所以再添加会造成手势冲突,从而不响应。需要绑定手势代理,遵循UIGestureRecognizerDelegate并实现下边的代理方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

51.设置UITextField光标位置:

//index要设置的光标位置
-(void)cursorLocation:(UITextField *)textField index:(NSInteger)index
{
    NSRange range = NSMakeRange(index, 0);
    UITextPosition *start = [textField positionFromPosition:[textField beginningOfDocument] offset:range.location];
    UITextPosition *end = [textField positionFromPosition:start offset:range.length];
    [textField setSelectedTextRange:[textField textRangeFromPosition:start toPosition:end]];
}

52.去除webView黑底:

[webView setBackgroundColor:[UIColor clearColor]];
[webView setOpaque:NO];
for (UIView *subView in [webView subviews])
{
    if ([subView isKindOfClass:[UIScrollView class]])
    {
        for (UIView *v2 in subView.subviews)
        {
            if ([v2 isKindOfClass:[UIImageView class]])
            {
                v2.hidden = YES;
            }
        }
    }
}

53.解决openUrl延时问题:

//方法一
dispatch_async(dispatch_get_main_queue(), ^{
     UIApplication *application = [UIApplication sharedApplication];
    if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
        [application openURL:URL options:@{}
           completionHandler:nil];
    } else {
        [application openURL:URL];
    }
});
// 方法二
[self performSelector:@selector(redirectToURL:) withObject:url afterDelay:0.1];
-(void)redirectToURL
{
    UIApplication *application = [UIApplication sharedApplication];
    if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
        [application openURL:URL options:@{}
           completionHandler:nil];
    } else {
        [application openURL:URL];
    }
}

54.UITextField 只能输入数字和字母:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(textFieldChanged:)
                                                 name:UITextFieldTextDidChangeNotification
                                               object:nil];
监听name:UITextFieldTextDidChangeNotification 和  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 来实现。
- (BOOL)validatePasswordString:(NSString *)resultMStr
{
    BOOL result = YES;
    switch (self.mode) {
        case HXSChangePasswordLogin: {
            NSString *regex = @"^[a-zA-Z0-9]+$";
            NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
            result = [pred evaluateWithObject:resultMStr];
            break;
        }

        case HXSChangePasswordPay: {
            NSString *regex = @"^[0-9]+$";
            NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
            result = [pred evaluateWithObject:resultMStr];
            break;
        }
    }

    return result;
}

55.退出app:

- (void)exitApplication{
    AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
    UIWindow *window = app.window;
    
    [UIView animateWithDuration:0.5f animations:^{
        window.alpha = 0;
        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
    } completion:^(BOOL finished) {
        exit(0);
    }];
}

56.返回当前星期几:

- (NSString*)toWeekString
{
    static NSCalendar *calendar;
    if (calendar == nil) {
        calendar =
        [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    }
    unsigned unitFlags = NSWeekdayCalendarUnit;
    NSDateComponents *comps = [calendar components:unitFlags fromDate:self];
    NSArray *weekArr =
    [NSArray arrayWithObjects:@"日",@"一",@"二",@"三",@"四",@"五",@"六", nil];
    
    return [NSString stringWithFormat:@"星期%@",
            [weekArr objectAtIndex:[comps weekday]-1]];
}

57.tableview中隐藏没有内容的cell:

self.tableView.tableFooterView = [[UIView alloc] init];

58.像Safari一样滑动时隐藏navigationbar:

self.navigationController.hidesBarsOnSwipe = YES;

59.ScrollView莫名其妙不能在viewController划到顶:

self.automaticallyAdjustsScrollViewInsets = NO; 

60.点击self.view就让键盘收起:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{  
   [self.view endEditing:YES];
}

61.用UIImagePickerController会导致我的statusbar的样式变成黑色:

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
   [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

62.navigationbar变成透明的而不是带模糊的效果:

[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
self.navigationBar.shadowImage = [UIImage new]; 
self.navigationBar.translucent = YES;

63.改变uitextfield placeholder的颜色和位置:

-(void) drawPlaceholderInRect:(CGRect)rect 
{  
  [[UIColor blueColor] setFill]; 
  [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment]; 
}

64.左右抖动动画:

//1.创建核心动画
CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];  
//2.告诉系统执行什么动画。
keyAnima.keyPath = @"transform.rotation"; keyAnima.values = @[@(-M_PI_4 /90.0 * 5),@(M_PI_4 /90.0 * 5),@(-M_PI_4 /90.0 * 5)];  
//3.执行完之后不删除动画
keyAnima.removedOnCompletion = NO;  
//4.执行完之后保存最新的状态
keyAnima.fillMode = kCAFillModeForwards;  
//5.动画执行时间
keyAnima.duration = 0.2;  
//6.设置重复次数。
keyAnima.repeatCount = MAXFLOAT;  
//7.添加核心动画
[self.iconView.layer addAnimation:keyAnima forKey:nil];

65.屏幕截图:

//1.开启一个与图片相关的图形上下文 
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,NO,0.0);  
//2.获取当前图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();  
//3.获取需要截取的view的layer 
[self.view.layer renderInContext:ctx];  
//4.从当前上下文中获取图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();  
//5.关闭图形上下文 
UIGraphicsEndImageContext();  
//6.把图片保存到相册 
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

66.强制横屏:

#pragma mark - 强制横屏代码
-(BOOL)shouldAutorotate
{  
   //是否支持转屏  
   return NO;
}
 
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
{  
   //支持哪些转屏方向  
   return UIInterfaceOrientationMaskLandscape;
}
 
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{  
   return UIInterfaceOrientationLandscapeRight;
}

-(BOOL)prefersStatusBarHidden
{  
   return NO;
}

67.应用程序的生命周期:

//1.启动但还没进入状态保存 :
 -(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
//2.基本完成程序准备开始运行:
 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
//3.当应用程序将要入非活动状态执行,应用程序不接收消息或事件,比如来电话了:
 -(void)applicationWillResignActive:(UIApplication *)application  
//4.当应用程序入活动状态执行,这个刚好跟上面那个方法相反:
 -(void)applicationDidBecomeActive:(UIApplication *)application  
//5.当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可:
 -(void)applicationDidEnterBackground:(UIApplication *)application 
//6.当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反:
 -(void)applicationWillEnterForeground:(UIApplication *)application  
//7.当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作:
 -(void)applicationWillTerminate:(UIApplication *)application

68.视图的生命周期:

1. alloc 创建对象,分配空间
2. init (initWithNibName) 初始化对象,初始化数据
3. loadView 从nib载入视图 ,除非你没有使用xib文件创建视图
4. viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5. viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6. viewDidAppear 视图已在屏幕上渲染完成
7. viewWillDisappear 视图将被从屏幕上移除之前执行
8. viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
9. dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
   viewVillUnload- 当内存过低,即将释放时调用;viewDidUnload-当内存过低,释放一些不需要的视图时调用。

69.设置按钮字体居右:

btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;

70.单选:

-(void)ButtonAction:(UIButton*)btn 
{
       NSPredicate*pre = [NSPredicatepredicateWithFormat:@"SELF.isSelected == YES"];
       NSArray *selectArray = [_buttonArrayfilteredArrayUsingPredicate:pre];
  [selectArrayenumerateObjectsUsingBlock:^(UIButton*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {
           obj.selected=NO;
           obj.backgroundColor= [UIColorwhiteColor];
           obj.layer.borderColor=SAColorByRGB(235,235,235).CGColor;
       }];
       btn.selected=YES;
}

71.label字体自适应:

label.adjustsFontSizeToFitWidth = YES;

72.注册截屏通知:

[[NSNotificationCenterdefaultCenter]addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];

//截屏响应
-(void)userDidTakeScreenshot:(NSNotification*)notification 
{
 [selfperformSelector:@selector(showNotification)withObject:nilafterDelay:0.5];
}
-(void)showNotification 
{
 [SANotificationViewshowNotificationViewWithContent:NSLocalizedString(@"已截屏,是要吐槽么?",nil)type:SANotificationViewTypeScreenShotsdidClick:nil];
}

73.取消searchbar背景色:

-(UISearchBar*)searchBar
{
   if(!_searchBar) {
      _searchBar= [[UISearchBaralloc]init];
      _searchBar.backgroundImage= [selfimageWithColor:[UIColorclearColor]size:CGSizeMake(4,4)];
      _searchBar.barStyle=UIBarStyleDefault;
      _searchBar.layer.cornerRadius=5;
      _searchBar.clipsToBounds=YES;
      _searchBar.backgroundColor=SAColorByRGB(243.0,243.0,243.0);
      _searchBar.placeholder=NSLocalizedString(@"搜索",nil);
      
      UITextField*field = [_searchBarvalueForKey:@"_searchField"];
      field.backgroundColor=SAColorByRGB(243.0,243.0,243.0);
      field.textColor=SAColorByRGB(51.0,51.0,51.0);
      field.font= [UIFontsystemFontOfSize:12];
   
      UIImage*image = [UIImageimageNamed:@"icon_search"];
      UIImageView*iconView = [[UIImageViewalloc]initWithImage:image];
      iconView.contentMode=UIViewContentModeCenter;
      iconView.frame=CGRectMake(0,0, image.size.width,28);
      field.leftView= iconView;
   [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(didChange:)name:UITextFieldTextDidChangeNotificationobject:nil];
}
   return_searchBar;
}

-(UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size 
{
    CGRectrect = CGRectMake(0,0, size.width, size.height);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRefcontext = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [colorCGColor]);
    CGContextFillRect(context, rect);
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

74.判断手机号:

NSString *phoneRegex = @"(\\\\+\\\\d+)?1[34578]\\\\d{9}$";
NSPredicate *phoneTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phoneTestevaluateWithObject:string];

75.判断邮箱:

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

76.改变图片透明度:

-(UIImage*)sa_imageWithAlpha:(CGFloat)alpha 
{
   if(alpha>1.0) {
     alpha =1.0;
   }

   if(alpha<=0.0) {
     alpha =0.0;
   }
   UIGraphicsBeginImageContextWithOptions(self.size,NO,0.0f);
   CGContextRefctx =UIGraphicsGetCurrentContext();
   CGRectarea =CGRectMake(0,0,self.size.width,self.size.height);
   CGContextScaleCTM(ctx,1, -1);
   CGContextTranslateCTM(ctx,0, -area.size.height);
   CGContextSetBlendMode(ctx,kCGBlendModeMultiply);
   CGContextSetAlpha(ctx, alpha);
   CGContextDrawImage(ctx, area,self.CGImage);
   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return newImage;
}

77.任意改变图片尺寸:

-(UIImage*)sa_imageWithSize:(CGSize)size
{
   UIGraphicsBeginImageContext(CGSizeMake(size.width, size.height));
   [selfdrawInRect:CGRectMake(0,0, size.width, size.height)];
   UIImage*resizedImage =UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return resizedImage;
}

78.等比例放缩图片:

-(UIImage*)sa_imageStretchWithScale:(CGFloat)scale 
{
   UIGraphicsBeginImageContext(CGSizeMake(self.size.width* scale,self.size.height* scale));
   [selfdrawInRect:CGRectMake(0,0,self.size.width* scale,self.size.height* scale)];
   UIImage*scaledImage =UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return scaledImage;
}

79.图片压缩(返回NSData 压缩比例0.0~1.0):

-(NSData*)sa_imageCompressReturnDataWithRatio:(CGFloat)ratio 
{
//UIImageJPEGRepresentation和UIImagePNGRepresentation
   if(ratio>1.0) {
     ratio =1.0;
   }

   if(ratio<=0) {
   ratio =0.0;
   }
   NSData*compressedData =UIImageJPEGRepresentation(self, ratio);
   return compressedData;
}

80.图片压缩 (返回UIImage 压缩比例0.0~1.0):

-(UIImage*)sa_imageCompressReturnImageWithRatio:(CGFloat)ratio {
//UIImageJPEGRepresentation和UIImagePNGRepresentation
   if(ratio>1.0) {
     ratio =1.0;
   }

   if(ratio<=0) {
     ratio =0.0;
   }
   NSData*compressedData =UIImageJPEGRepresentation(self, ratio);
   UIImage*compressedImage = [UIImageimageWithData:compressedData];
   return compressedImage;
}

81.将UIView转化成图片:

-(UIImage*)sa_getImageFromView:(UIView*)theView 
{
UIGraphicsBeginImageContextWithOptions(theView.bounds.size,YES, theView.layer.contentsScale);
   [theView.layerrenderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return image;
}

82.两张图片叠加、合成:

-(UIImage*)sa_integrateImageWithRect:(CGRect)rect andAnotherImage:(UIImage*)anotherImage anotherImageRect:(CGRect)anotherRect integratedImageSize:(CGSize)size 
{
   UIGraphicsBeginImageContext(size);
   [selfdrawInRect:rect];
   [anotherImagedrawInRect:anotherRect];
   UIImage*integratedImage =UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return integratedImage;
}

83.图片添加水印:

/**
图片添加水印
@param markImage水印图片
@param imgRect水印图片对于原图片的rect
@param alpha水印图片透明度
@param markStr水印文字
@param strRect水印文字对于原图片的rect
@param attribute水印文字的设置颜色、字体大小
@return添加水印后的图片
*/

-(UIImage*)sa_imageWaterMark:(UIImage*)markImage imageRect:(CGRect)imgRect markImageAlpha:(CGFloat)alpha markString:(NSString*)markStr stringRect:(CGRect)strRect stringAttribute:(NSDictionary*)attribute 
{
     UIGraphicsBeginImageContext(self.size);
[selfdrawInRect:CGRectMake(0,0,self.size.width,self.size.height)blendMode:kCGBlendModeNormalalpha:1.0];

     if(markImage) 
     {
      [markImagedrawInRect:imgRectblendMode:kCGBlendModeNormalalpha:alpha];  
     }

     if(markStr) {
       //UILabel convertto UIImage
       UILabel*markStrLabel = [[UILabelalloc]initWithFrame:CGRectMake(0,0, strRect.size.width,         strRect.size.height)];
       markStrLabel.textAlignment=NSTextAlignmentCenter;
       markStrLabel.numberOfLines=0;
       markStrLabel.attributedText= [[NSAttributedStringalloc]initWithString:markStrattributes:attribute];
       UIImage*image = [selfsa_getImageFromView:markStrLabel];
    [imagedrawInRect:strRectblendMode:kCGBlendModeNormalalpha:1.0];;
 }
     UIImage*waterMarkedImage =UIGraphicsGetImageFromCurrentImageContext();
     UIGraphicsEndImageContext();
     return waterMarkedImage;
}

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

//分组列表头部空白处理
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)];
self.tableView.tableHeaderView = view;

85.两种方法删除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];
}

86.防止scrollView手势覆盖侧滑手势:

[scrollView.panGestureRecognizerrequireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];

87.获取到webview的高度:

CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

88.WebView长按保存图片:

加一个长按手势,在响应里:
NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
NSString *urlToSave = [self.webView stringByEvaluatingJavaScriptFromString:imgURL];

89.cell右边标志符的颜色改变:

self.accessoryType = UITableViewCellAccessoryCheckmark;
self.tintColor = [UIColor colorWithRed:140.0/255.0 green:197.0/255.0  blue:66.0/255.0  alpha:1];

90.设置启动页的时间:

[NSThread sleepForTimeInterval:3.0];//设置启动页面时间

91.数组元素按字母排序:

    _enStateArr = [_stateDic allKeys];
    _enStateArr = [_enStateArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
        NSComparisonResult result = [obj1 compare:obj2];
        return result==NSOrderedDescending;
    }];

92.四舍五入:

-(float)roundFloat:(float)price
{
    return (floorf(price*100 + 0.5))/100;
}

93.红外线感应器的使用(多用于电话接听界面):

  //允许临近检测,物体接近屏幕屏幕变黑且不可操作
  [UIDevice currentDevice].proximityMonitoringEnabled = YES;

94.解决ScrollView滑动卡顿的问题:

     /** 解决scrollView 滑动卡顿问题 */
    [self performSelector:@selector(test1) withObject:nil afterDelay:4 inModes:@[NSDefaultRunLoopMode]];

95.删除重用的cell的所有子视图,从而得到一个没有特殊格式的cell,供其他cell重用:

    if (cell == nil) 
    {   
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];   
    }   
    else   
    {   
        //删除cell的所有子视图   
        while ([cell.contentView.subviews lastObject] != nil)   
        {   
            [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];   
        }   
    }

96.iOS单例创建:

+(instancetype)shareManager
{
    static User *user = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        user = [[User alloc] init];
    });
    return user;
}

97.bounds 和 Frame区别:

先看到下面的代码你肯定就明白了一些:
-(CGRect)frame{
    return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
    return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
很明显,bounds的原点是(0,0)点(就是view本身的坐标系统,默认永远都是0,0点,除非人为setbounds),而frame的原点却是任意的(相对于父视图中的坐标位置)。

98.设置键盘在tableView滚动的时候消失掉:

//设置键盘在tableview滚动的时候消失.
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

99.UILabel修改行距,首行缩进:

UILabel修改文字行距,首行缩进
lineSpacing: 行间距
firstLineHeadIndent:首行缩进
font: 字体
textColor: 字体颜色
-(NSDictionary *)settingAttributesWithLineSpacing:(CGFloat)lineSpacing FirstLineHeadIndent:(CGFloat)firstLineHeadIndent Font:(UIFont *)font TextColor:(UIColor *)textColor
{
    //分段样式
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    //行间距
    paragraphStyle.lineSpacing = lineSpacing;
    //首行缩进
    paragraphStyle.firstLineHeadIndent = firstLineHeadIndent;
    //富文本样式
    NSDictionary *attributeDic = @{
                                   NSFontAttributeName : font,
                                   NSParagraphStyleAttributeName : paragraphStyle,
                                   NSForegroundColorAttributeName : textColor
                                   };
    return attributeDic;
}

100.在当前屏幕获取第一响应:

UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView * firstResponder = [keyWindow performSelector:@selector(firstResponder)];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容