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 *)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

你可能感兴趣的:(iOS开发中用到的小知识点(1))