常用代码片断,只为了便于记忆
日期格式转换
// 设置数据模型的时间 NSDate *now = [NSDate date]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"HH:mm"; msg.time = [fmt stringFromDate:now]; // fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 结果:2014-08-09 15:45:56
Modal
// 以Modal的形式展示控制器 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion // 关闭当初Modal出来的控制器 - (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
@property属性的用法
- weak(assign) : 代理UI控件
- strong(retain) : 其他对象(除代理UI控件字符串以外的对象),可变数组
- copy : 字符串/不可变数组NSArray
- assign : 非对象类型(基本数据类型intfloatBOOL枚举结构体)
图片开启交互
userInteractionEnabled属性默认值为YES,但UIView的一些子类中对该属性进行了覆盖,并将其默认值设置为了NO,其中UIImageView和UILabel就是这样的类。userInteractionEnabled属性在UIImageView和UILabel的文档中都有简单的描述。在实际的界面开发过程中,我们经常用UIImageView来模拟按钮或其它可以响应用户touch事件的显示区,并通过gesture来为其添加事件响应,因此为了保证事件能正常的接受,我们必须要显示的将UIImageView对象的userInteractionEnabled的值设为YES 。
UIImageView *containerView = [[UIImageView alloc] init]; containerView.image = [UIImage imageNamed:@"popover_background"]; containerView.userInteractionEnabled = YES; // 开启交互
图片固定宽高填充
// 内容模式 self.contentMode = UIViewContentModeScaleAspectFill; // 超出边框的内容都剪掉 self.clipsToBounds = YES;
获取扩展名
[photo.thumbnail_pic.lowercaseString hasSuffix:@"gif"];
点击cell的时候不要变色
self.backgroundColor = [UIColor clearColor]; // 点击cell的时候不要变色 self.selectionStyle = UITableViewCellSelectionStyleNone;
状态栏菊花
状态栏有网络请求前,设置为Yes 。在网络请求结束,设置为No。
//状态栏菊花 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
修改pageController默认分页点
[_pageController setValue:[UIImage imageNamed:@"home_slipt_nor"] forKeyPath:@"_pageImage"]; [_pageController setValue:[UIImage imageNamed:@"home_slipt_pre"] forKeyPath:@"_currentPageImage"];
Xib中Lable换行
Lable的文字想换行,按信Option+空格。
获取系统所有的View
for (UIView *view in [UIApplication sharedApplication].keyWindow.subviews) { if ([view isKindOfClass:[LeftMenu class]]) { //[view removeFromSuperview]; return; } }
UIButton 设置图片不变型 setImage:
[btn.imageView setContentMode:UIViewContentModeScaleAspectFill];
UIButton设置图片在上面,文字在下面
见我的另一篇文章:http://www.cnblogs.com/jys509/p/4989893.html
数组排序
// 排序 // 系统是按照从小 -> 大的顺序排列对象 [parts sortUsingComparator:^NSComparisonResult(HWTextPart *part1, HWTextPart *part2) { // NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending // 返回NSOrderedSame:两个一样大 // NSOrderedAscending(升序):part2>part1 // NSOrderedDescending(降序):part1>part2 if (part1.range.location > part2.range.location) { // part1>part2 // part1放后面, part2放前面 return NSOrderedDescending; } // part1<part2 // part1放前面, part2放后面 return NSOrderedAscending; }];
parts 是 NSMutableArray 数组。
改变状态栏颜色
定义一个全局的变量
UIStatusBarStyle _statusBarStyle
实现重写方法
//修改状态栏的状态 浅色 - (UIStatusBarStyle)preferredStatusBarStyle { return _statusBarStyle; }
在需要判断的地方
//判断状态栏颜色 _statusBarStyle = (progress > 0.5) ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault; //状态栏颜色记得跟新状态 [self.navigationController setNeedsStatusBarAppearanceUpdate];
简单导航栏背景颜色
@implementation UIViewController (navigatinSetting) -(void)setNavigationBarBackGroundColor:(UIColor *)color { [[self navigationBarBackGroundView] setBackgroundColor:color]; } -(void)setNavigationBarAlpha:(CGFloat)alpha { [[self navigationBarBackGroundView] setAlpha:alpha]; } -(UIView *)navigationBarBackGroundView { for (UIView *subView in self.navigationController.navigationBar.subviews) { if ([[subView class] isSubclassOfClass:NSClassFromString(@"_UINavigationBarBackground")]) { return subView; } } return nil; } @end
使用时:
//[self setNavigationBarBackGroundColor:[UIColor whiteColor]]; [self setNavigationBarAlpha:0];
隐藏导航栏时,手势失效
1.实现代理:UIGestureRecognizerDelegate
2.在ViewDidLoad 中添加代码
// 修复 侧滑失效 self.navigationController.interactivePopGestureRecognizer.delegate = self;
UITabelViewCell里的元素背景色点击失效
UITableView的Cell上添加一个UILabel标签,标签设置了背景色,文字颜色为白色。当我设置了cell点击高亮的时候,就会发现Label的背景色没了。
需要将 _label.backgroundColor 改成 _label.layer.backgroundColor 。
或者:
-(void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; imageViewIcon.backgroundColor = UIColor.redColor() } -(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { [super setHighlighted:highlighted animated:animated]; imageViewIcon.backgroundColor = UIColor.redColor() }
block快捷输出
打inlineBlock
请求超时
有时候,我们在请求网络的时候,会加上“正在加载”中的状态,由于网络超时等原因,请求没有响应回来。可以通过设置超时来处理。通过定时器来实现
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ Loading_Hide(self.viewController.view); });
禁用多个按钮同时点击
最近测试组的同事,经常提的一个bug就是一个界面上,多个按钮或者可以点击的视图,两个手指同时点下,会出现各种错误异常。好多人的解决方法是,利用一个bool值做判断,这样做太乱了。如果一个界面上的按钮在多个视图中,这种情况下应该怎么做呢。查询可一下文档,苹果给出了解决方法。只需要把那些不能同时点下的按钮或者视图设置一下即可。代码如下:
方法一. 在AppDelegate中添加 [[UIButton appearance] setExclusiveTouch:YES];
方法二. button.exclusiveTouch = YES;
[view setExclusiveTouch:YES];
调试时重新加载页面
[self.view removeFromSuperview];
[[UIApplication sharedApplication].keyWindow addSubview:self.view];
避免多次请求数据交错
可以通过把请求参数保存起来,当请求返回数据时,判断是不是当前的请求参数。如NSMutableDictionary *param.
请求网络,点回退
当发送网络请求的时,如果这个时候,点击返回到上一个页面,就会导致崩溃。有两种处理方法:
1、请求网络时,加一个全屏的loading框,不允许用户返回
2、在当前控制器的dealloc时,取消当前的网络请求。
- (void)dealloc { [self.manage.operationQueue cancelAllOperations]; }
打开sqlite文件
使用火狐浏览器--工具--附加组件--扩展--搜索“SQLite Manage”,重启浏览器就可以打开的SQLite Manager打开.sqlite文件
2020-07-01 ,发现火狐sqlite manage不好用了,没有可视化,最后找了一个
iOS调用系统相机将英文改成中文
在info.plist 中设置 Localization native development region 为china
显示成英文:en