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