iOS开发中用到的小知识点(1)

1.监听用户按下home键

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:)name:UIApplicationWillResignActiveNotification object:nil]; //监听是否触发home键挂起程序.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:)name:UIApplicationDidBecomeActiveNotification object:nil]; //监听是否重新进入程序程序

2.iOS 禁用或开启屏幕左滑动返回
3.修改导航栏颜色
4.修改状态栏颜色
5.保持屏幕唤醒,阻止锁屏
- (void)viewDidAppear:(BOOL)animated {

   [super viewDidAppear:animated];

  //禁用屏幕左滑返回手势

  if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])  {
      self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
  //保持屏幕唤醒,阻止锁屏
  [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
  //修改导航栏颜色
  self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
  self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
}


- (void)viewDidDisappear:(BOOL)animated {

  [super viewDidDisappear:animated];

  //开启   
  self.navigationController.interactivePopGestureRecognizer.enabled = YES;
  //关闭保持屏幕唤醒
  [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
  //修改导航栏颜色
  self.navigationController.navigationBar.tintColor = [UIColor blackColor];
  self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:0.90f green:0.91f blue:0.91f alpha:1.00f];
}

6.[NSString stringWithFormat:@"%.0f",_floatValue]保留小数点后几位 float double

%.f  表示小数点0位, %.1f  表示小数点1位,%.2f 表示小数点2位,依次类推.

7.根据UIColor一个颜色生成一张图片
把一个纯颜色转换成一张图片
+ (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); //宽高 1.0只要有值就够了
UIGraphicsBeginImageContext(rect.size); //在这个范围内开启一段上下文
CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);//在这段上下文中获取到颜色UIColor
    CGContextFillRect(context, rect);//用这个颜色填充这个上下文

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();//从这段上下文中获取Image属性,,,结束
    UIGraphicsEndImageContext();

    return image;
}

8、xib里面label文字设置换行

直接在需要换行的文字前: option + enter

9、ios 使用popToViewController返回到相应的Controller

1、取navigationCtroller中的Controllers  
NSArray * ctrlArray = self.navigationController.viewControllers;  
2、 [self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES];

10、iOS隐藏导航栏的返回按钮

[self.navigationController.navigationItem setHidesBackButton:YES]; 
[self.navigationItem setHidesBackButton:YES]; 
[self.navigationController.navigationBar.backItem setHidesBackButton:YES];

11、tableView整体上移时的解决方案

在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView或collectionView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配布局。

self.automaticallyAdjustsScrollViewInsets = NO;// 默认是YES

12、当cell很少的情况下(没有占满屏幕),不能拖拽collectionView进行下拉刷新
解决方法:

当数据不多,不够一屏幕,collectionView.contentSize小于collectionView.frame.size的时候,UICollectionView是不会滚动的
当所有collectionCell的高度和没有占满整个parent container的时候,当下拉的时候都不会触发scrollViewDidScroll。
所以在创建collectionView的时候添加:
self.collectionView.alwaysBounceVertical = YES;

13、iOS开发 给Label加下划线、中划线

NSString *price = @"1000000";
NSRange titleRange = {6,15};

//添加中划线:
UILabel * strikeLabel = [[UILabel alloc] initWithFrame:(CGRectMake(50, 50, 100, 30))];
NSString *textStr = [NSString stringWithFormat:@"%@元", price];

//中划线
NSDictionary *attribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]};
NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString:textStr attributes:attribtDic];

// 赋值
strikeLabel.attributedText = attribtStr;

[self.view addSubview:strikeLabel];

//添加下划线:
UILabel *underlineLabel = [[UILabel alloc] initWithFrame:(CGRectMake(50, 100, 250, 30))];
NSString *underlineStr = [NSString stringWithFormat:@"touch underline text to jump"];

// 下划线
NSMutableAttributedString *underlineattribtStr = [[NSMutableAttributedString alloc]initWithString:underlineStr];
[underlineattribtStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:titleRange];
[underlineattribtStr addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0.09f green:0.68f blue:0.72f alpha:1.00f] range:titleRange];
//赋值
underlineLabel.attributedText = underlineattribtStr;

[self.view addSubview:underlineLabel];

14、扩大按钮UIButton的点击范围

继承一个UIButton,然后重写 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 这个方法,苹果的概念是点击区域最好不小于44 point,所以我们根据这个数值计算我们的点击区域。

自定义按钮 扩大按钮点击范围

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event

{

CGRect bounds =self.bounds;

CGFloat widthDelta =44.0- bounds.size.width;

CGFloat heightDelta =44.0- bounds.size.height;

bounds =CGRectInset(bounds, -0.5* widthDelta, -0.5*heightDelta);//注意这里是负数,扩大了之前的bounds的范围

return CGRectContainsPoint(bounds, point);

}

15、利用KVO来监听对象属性的变化

    - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
//监听一个按钮可点击与不可点击的变化
[self.photoLibraryBtn addObserver:self forKeyPath:@"enabled" options:NSKeyValueObservingOptionNew context:nil];

一旦你所监听的那个属性的值发生了改变,监听者(我们这里的监听者就是控制器)就会调用-observeValueForKeyPath: ofObject: change: context:方法做出相应的反应:

#pragma mark - KVO
// KVO的监听方法,只要是要监听的属性发生改变,控制器就会调用这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if ([change objectForKey:@"new"]) {//1
        self.photoLibraryBtn.backGroundColor = [UIColor colorWithRed:77/255.0 green:77/255.0 blue:77/255.0 alpha:0.4].CGColor;
    }else{//0
        self.photoLibraryBtn.backGroundColor = [UIColor colorWithRed:77/255.0 green:77/255.0 blue:77/255.0 alpha:1].CGColor;
    }
}

// 在监听器销毁之前移除KVO

- (void)dealloc {
    // 移除KVO监听器
    [self.photoLibraryBtn removeObserver:self forKeyPath:@"enabled"]; 
}

16、修改textField的placeholder的字体颜色、大小

[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
[textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"];

17、当tableView占不满一屏时,去除下边多余的单元格

self.tableView.tableHeaderView = [UIView new];
self.tableView.tableFooterView = [UIView new];

18、判断控制器是不是当前显示的控制器

if ([self.navigationController.visibleViewController isEqual:self]) {  
           
}  

19、UICollectionView设置header悬浮效果
在iOS9.0后UICollectionView的头部视图也能像tableView的header一样出现悬浮挂住的效果。

 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
//header
flowLayout.sectionHeadersPinToVisibleBounds = YES;
//footer
flowLayout.sectionFootersPinToVisibleBounds = YES;

20、设置导航栏标题的字体大小和颜色

方法一:自定义视图。

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];  
titleLabel.backgroundColor = [UIColor grayColor];  
titleLabel.font = [UIFont boldSystemFontOfSize:20];  
titleLabel.textColor = [UIColor blueColor];  
titleLabel.textAlignment = NSTextAlignmentCenter;  
titleLabel.text = @"导航栏标题";  
self.navigationItem.titleView = titleLabel;  

方法二:在默认显示的标题中直接修改文字的大小和颜色。

self.navigationItem.title = @"导航栏标题";  
[self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:18],NSForegroundColorAttributeName:[UIColor blueColor]}]; 

21、iOS移除git管理

打开终端
1、cd到项目目录
2、执行    find ./ -name .git -exec rm -rf {} \;   即可

命令中包含.git是删除掉目录下隐藏的.git文件夹,如果是svn管理的话执行
find ./ -name .svn -exec rm -rf {} \;

22.打印NSRange,CGRect,CGPoint等结构体

NSString *NSStringFromCGPoint(CGPoint point);
NSString *NSStringFromCGVector(CGVector vector);
NSString *NSStringFromCGSize(CGSize size);
NSString *NSStringFromCGRect(CGRect rect);
NSString *NSStringFromCGAffineTransform(CGAffineTransform transform);
NSString *NSStringFromUIEdgeInsets(UIEdgeInsets insets);
NSString *NSStringFromUIOffset(UIOffset offset);
NSString *NSStringFromSelector(SEL aSelector);
NSString *NSStringFromClass(Class aClass);
NSString *NSStringFromProtocol(Protocol *proto);
NSRange NSUnionRange(NSRange range1, NSRange range2);
NSRange NSIntersectionRange(NSRange range1, NSRange range2);
NSString *NSStringFromRange(NSRange range);
NSRange NSRangeFromString(NSString *aString);

CGRect frame = CGRectMake(10, 10, 10, 10);
NSLog(@"%@", NSStringFromCGRect(frame));

23、"OBJC_CLASS$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in BaiduMapAPI_Base(VDeviceAPI.o)

项目添加CoreTelephony.framework.框架解决

24、隐藏APP的状态栏statusBar

1)全局隐藏statusBar 在APPDelegate中,设置application.statusBarHidden为YES.

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

2)info.plist中,设置UIViewControllerBasedStatusBarAppearance为false。

单独隐藏某个ViewController的statusBar需要重写prefersStatusBarHidden方法

- (BOOL)prefersStatusBarHidden {
    return YES;
}

25、格式化日期时间

参考

//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//用[NSDate date]可以获取系统当前时间
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//输出格式为:2010-10-27 10:22:13
NSLog(@"%@",currentDateStr);

字符说明

G: 公元时代,例如AD公元  
yy: 年的后2位  
yyyy: 完整年  
MM: 月,显示为1-12  
MMM: 月,显示为英文月份简写,如 Jan  
MMMM: 月,显示为英文月份全称,如 Janualy  
dd: 日,2位数表示,如02  
d: 日,1-2位显示,如 2  
EEE: 简写星期几,如Sun  
EEEE: 全写星期几,如Sunday  
aa: 上下午,AM/PM  
H: 时,24小时制,0-23  
K:时,12小时制,0-11  
m: 分,1-2位  
mm: 分,2位  
s: 秒,1-2位  
ss: 秒,2位  
S: 毫秒  
Z:GMT
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容