1.给UIView设置圆角,边框,阴影绘制,需要使用layer
1)设置圆角cornerView.layer.cornerRadius = 20; //设置试图圆角的大小cornerView.layer.masksToBounds = YES //防止子元素溢出父试图将一个正方形设置成圆形,代码为:cornerView.layer.cornerRadius = cornerView.frame.size.height/2;cornerView.layer.masksToBounds = YES;注意,需要 #import <QuartzCore/QuartzCore.h> 导入,否则,不能识别cornerRadius和masksToBounds。(在我使用的Xcode7.0版本没有遇到这个问题)2)绘制边框borderView.layer.borderWidth = 1.0; //绘制边框的大小borderView.layer.borderColor = [UIColor blackColor].CGColor; //边框的颜色3)绘制阴影shadowView.layer.shadowColor = [UIColor redColor].CGColor;shadowView.layer.shadowOffset = CGSizeMake(5.0, 5.0); //设置偏移量,可以为负数,控制上下左右偏移shadowView.layer.shadowOpacity = YES;
2.隐藏键盘的方式,常用的方法
1)重写touchesBegan方法, 点击屏幕的时候隐藏键盘-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch=[[event allTouches] anyObject]; if (touch.tapCount >=1) { [meter resignFirstResponder]; [feet resignFirstResponder]; }}
相当于屏幕任何位置的点击事件(除了各组件的点击处)可以在这个方法里执行要隐藏或remove的view.
2)重写textField的delegate中的-(BOOL)textFieldShouldReturn:(UITextField *)textField方法,在点击return的时候调用方法,让textField放弃
第一响应者.
3)在最底层铺上一个透明的button活着controller,时间相应为回收键盘.
3.UINavigationBar的控件设置
UINavigationBar (导航栏)上的设置主要分两部分, 为导航栏上的各种导航部件(UINavigationItem), 为导航栏的相关设置.navigationBar—导航条,iOS7之后默认是半透明的,iOS7之前默认是不透明的。 navigationBar 竖屏下默认高度44,横屏下默认高度32。 iOS7之后,navigationBar的背景会延伸到statusBar上。导航栏高度仍保持44,但显示效果为64。 每个视图控制器都有一个UINavigationItem属性。UINavigationItem中设置的左按钮、右按钮、标题等,会随着控制器的显 ,也显示到NavigationBar上。
self.navigationItem.title = @"老炮儿"; //修改自己试图的标题
self.navigationItem.titleView = ........ //可以设置标题视图
self.navigationController.navigationBarHidden = NO; // 导航栏的显隐属性
self.navigationController.navigationBar.barStyle =UIBarStyleDefault; // 导航栏样式
self.navigationController.navigationBar.backgroundColor =[UIColor redColor]; // 背景颜色
self.navigationController.navigationBar.barTintColor =[UIColor yellowColor]; // 导航栏颜色
self.navigationController.navigationBar.tintColor =[UIColor blackColor];// 导航栏上的元素颜色(对字体颜色无效)
导航栏半透明的效果(iOS7以后 默认为 YES),当半透明效果开启时 屏幕左上角为坐标原点,当关闭时,导航栏左下角为坐标原点 self.navigationController.navigationBar.translucent = NO;
给navigationController设置背景照片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"XXX.png"] forBarMetrics:UIBarMetricsDefault];
IOS5.0以上,api有了上面setBackgroundImage的方法,可以直接设置,如果项目需要适配5.0以下版本的设备,最好加一个判读,是否有此函数,有则设置,没有就通过drawRect方法设置。
另外:设置背景图片无法匹配backButton或rightButtonItem,所以返回按钮或右边自定义的Bar button Item需要自行处理。
给navigationController修改字体
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:12.] forKey:NSFontAttributeName]]; //修改字体大小
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor redColor] forKey:NSForegroundColorAttributeName]]; //修改字体颜色
滑动的时候隐藏navigationBar
self.navigationController.hidesBarsOnSwipe = YES;
navigationbar导航条,返回键带的title太讨厌了,怎么让它消失?
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];
4.在有navigationBar和tabBar时,视图的设置
1)edgesForExtendedLayout
这个属性是UIExtendedEdge类型,用来制定视图的哪条边需要扩展。比如UIRectEdgeTop,它把视图区域顶部扩展到statusBar(以前是navigationBar下面);UIRectEdgeBottom是把区域底部扩展到屏幕下方边缘。默认值是UIRectEdgeAll。
2)extendedLayoutIncludesOpaqueBars
如果你使用了不透明的导航栏,设置edgesForExtendedLayout的时候也请将extendedLayoutIncludesOpaqueBars的值设置为No(默认值是YES)。
3)automaticallyAdjustsScrollViewInsets
为YES时,它会找view里的scrollView,并设置scrollView的contentInset为{64, 0, 0, 0}。在为YES的时候,UIViewController下如果只有一个UIScollView或者其子类,那么会自动留出空白,让scollview滚动经过各种bar下面时能隐约看到内容。但是每个UIViewController只能有唯一一个UIScollView或者其子类,如果超过一个,需要将此属性设置为NO,自己去控制留白以及坐标问题。
5.给UIView设置背景图片
[view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pabb_leftnaviview_bg.png"]]];
大小设置:
[view setFrame:CGRectMake(9, 60, 120, 250)];
6. 怎么在不新建一个Cell的情况下调整separaLine的位置
_myTableView.separatorInset = UIEdgeInsetsMake(0, 100, 0, 0);
7.要让TableView不显示没内容的Cell怎么办?
类似于图1,我不想让下面的那些空显示。很简单,添加“self.tableView.tableFooterView = [[UIView alloc] init];”
试过都说好,加完这句之后就变成了图2的样子
.
8.KVC在存数数据,model类中的应用
在model类中的.h文件中声明属性,以获取后台返回数据,名称,类型相同
在存储数据时(一般在VC中)
9.创建cell时对cell进行判断,区别创建
根据后台返回的数据的数据类型,设置显示用的cell样式
根据要cell在的位置,设置要显示的cell的样式
10.navigationBar上的edit按钮改成中文
navigationBar上的edit按钮有两种状态"edit"和"done",配合tableView使用,可以让tableView进入编辑状态.现在自定义编辑按钮
把edit写成中文样式
11,UI中各个控件的继承图谱
12.Button的字体显示位置,颜色的设置
设置文字的内容
[btn setTitle: @"search" forState: UIControlStateNormal];
设置字体的大小
btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
初始化button后的字体颜色是白色的,如果背景颜色也是白色是看不到字的,需要修改button的字体颜色
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
有些时候我们想让UIButton的title居左对齐,我们设置
btn.textLabel.textAlignment = UITextAlignmentLeft; ××××××是没有作用的,我们需要设置
btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft; //左对齐
但是问题又出来,此时文字会紧贴到做边框,我们可以设置
btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0); //使文字距离做边框保持10个像素的距离。
13.当铺设UI控件时,可能会遇到层级遮挡的关系View1,View2的父试图都是View,如果View2 挡住了View1,但是View1有touch事件.
我们可以用以下代码写到View2的类中
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{ UIView *hitView = [super hitTest:point withEvent:event]; if (hitView == self) { return nil; } else { return hitView; }}14.汉字转换为英文字符串的方法
//获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)-(NSString *)firstCharactor{ //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:self.name]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO); //再转换为不带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO); //转化为大写拼音 NSString *pinYin = [str capitalizedString]; //获取并返回首字母 return [pinYin substringToIndex:1];}15,写一个常用的获取当前日期,时间的代码。并且能以规定的格式显示出来
NSDate *currentDate = [NSDate date];
//获取当前时间,日期
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@
"YYYY/MM/dd hh:mm:ss SS"
];
NSString *dateString = [dateFormatter stringFromDate:currentDate];
NSLog(@
"dateString:%@"
,dateString);
这样就能按照规定的格式显示日期,时间了。
dateString:2015/01/03 08:01:20 24
说明下格式对应的意义
YYYY(年)/MM(月)/dd(日) hh(时):mm(分):ss(秒) SS(毫秒)需要用哪个的话就把哪个格式加上去。值得注意的是,如果想显示两位数的年份的话,可以用”YY/MM/dd hh:mm:ss SS”,两个Y代表两位数的年份。而且大写的M和小写的m代表的意思也不一样。“M”代表月份,“m”代码分钟“HH”代表24小时制,“hh”代表12小时制
16,CoreData数据迁移步骤
//数据迁移步骤
//保证原有的数据库不要做任何改动//1,选中model.xcdatamodeld -> 工具栏Editor -> add Model Version//2,为新版本取个名字 -> Next//3,右面菜单栏说明文件下 Model Version -> 选择新创建的版本//4,为新的表添加新的字段//5,删除原来的model类4个文件//6,Command + N -> NSManagerObjectSubClass -> 选中新的表 -> creat//7,Command + N -> mapping model ->选中原来的模型 ->选中新模型 ->创建//8, 给创建的小秘书提示版本迁移 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqllitePath] options:@{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES} error:nil];17,UITextField的placeholder的字体,颜色,居中显示
UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(12,10, SCREEN_WIDTH - 24, 50)];
textField.borderStyle = UITextBorderStyleRoundedRect; textField.placeholder = @"请输入标题"; [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; [textField setValue:[UIFont boldSystemFontOfSize:18] forKeyPath:@"_placeholderLabel.font"]; textField.textAlignment = NSTextAlignmentCenter;18,计时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(onTime) userInfo:nil repeats:YES];
在SEL中执行去执行需要延迟操作的方法,比如动画,比如自动消失效果,比如循环播放
19,全球流NSNotificationCenter的用法
第一步:注册通知中心
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushVC:) name:@"fuck" object:nil];
第二步:写SEL的方法,传递的参数是字典类型的
-(void)pushVC:(NSNotification *)user{
NSDictionary *dic = user.userInfo; //属性,提取出字典 CustomFileTableViewController *customVC = [[CustomFileTableViewController alloc]init]; customVC.folderTime = [dic valueForKey:@"folderTime"]; customVC.folderName = [dic valueForKey:@"folderName"]; [self.navigationController pushViewController:customVC animated:YES];}第三步:在需要相应方法的地方对暗号
-(void)goHome:(UIButton *)button{
NSArray *array = button.subviews; UITextField *textField = (UITextField *)[array objectAtIndex:0]; NSString *folderName = textField.text; UILabel *label = (UILabel *)[array objectAtIndex:1]; NSString *folderTime = label.text; NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:0]; [dic setObject:folderName forKey:@"folderName"]; [dic setObject:folderTime forKey:@"folderTime"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"fuck" object:button userInfo:dic]; //对上暗号并将需要传递的信息,写入字典传递过去}20,int ABS(int i); // 处理int类型的取绝对值
double fabs(double i); //处理double类型的取绝对值
float fabsf(float i); /处理float类型的取绝对值
21,创建单例类方法,通过这个类方法创建出来的都是单例的类对象
使用了Category(类目),即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。由于继承NSObject,所有的类都可以使用
在.h中
//使用可变字典存储每个类的单一实例,键为类名,值为该类的对象;
//声明为静态变量,可以保存上次的值;static NSMutableDictionary *instanceDict;id instance;+ (instancetype)sharedInstance { @synchronized(self) { //初始化字典; if (instanceDict == nil) { instanceDict = [[NSMutableDictionary alloc] init]; } //获取类名; NSString *className = NSStringFromClass([self class]); if (className) { //查找字典中该类的对象,使用类名去进行查找,可以确保一个类只被存储一次; instance = instanceDict[className]; if (instance == nil) { //该类的对象还没实例化,就进行初始化,并根据键值对的形式存储; instance = [[self.class alloc] init]; [instanceDict setValue:instance forKey:className]; }else{ //该类对象已经存储在字典中,直接返回instance即可; } }else{ //没有获取类名,所以确保sharedInstance是一个类方法,用类进行调用; } return instance; }}@end通过类方法:sharedInstance,创建出来的对象,都是单例.
22,iOS 8 系统自带BlurEffect 毛玻璃特效
毛玻璃 的UI 设计在手机开发中已经 非常热门,在之前的 开发中 一般用到 github上FXBlurView 封装好的一个view类 ,可以直接应用加载到控件中,iOS 8 后更新的
UIBlurEffect类和 UIVisualEffectView类使这种特效应用更加便捷,高效。
使用也非常简便,UIBlurEffect 类是设定毛玻璃特效的类型,UIVisualEffectView类在创建时加入上一个类对象,剩下的跟普通的view 控件等用法就一样了 ,附代码事例:
// 创建需要的毛玻璃特效类型
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
// 毛玻璃view 视图
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
//添加到要有毛玻璃特效的控件中
effectView.frame = self.imageV.bounds;
[self.imageV addSubview:effectView];
//设置模糊透明度
effectView.alpha = .8f;
23,可以使用stringByTrimmingCharactersInSet函数过滤字符串中的特殊符号
首先自己定义一个NSCharacterSet, 包含需要去除的特殊符号
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];由于NSString中有全角符号和, 因此有些符号要包括全角和半角的然后调用stringByTrimmingCharactersInSetNSString *trimmedString = [string stringByTrimmingCharactersInSet:set];trimmedString就是过滤后的字符串取出字符串中的空格
http://my.oschina.net/u/2361492/blog/487703?fromerr=pgTCOpmI
关于NSCharacterSet的一些深层次的简介
24,让tableView回到顶部
使用 selectRowAtIndexPath,不会有反应
换一个 scrollToRowAtIndexPath 之后果然可以了。[TableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
25.如何让UITableView响应touchesBegan:withEvent:之类的UIResponder的方法
UITableView是不会响应touchesBegan:withEvent:之类的UIResponder的方法的。因此,加在其上的所有视 图的响应者链就断了。如果在UITableView其上加任何的自身不具备类似UIButton一样有目标动作机制的UIView及其子类控件的时候,这 个控件也不会响应touchesBegan:withEvent:方法。即便是设置该控件的userInteractionEnabled为YES也没用。如此一来,如果想要这些控件具有交互性能怎么办?有一种很直观的方法,给这个控件加上手势识别器
26,/** * 利用 KVC 把系统的 tabBar 类型改为自定义类型。 */- (void)setUpTabBar { [self setValue:[[CYLTabBar alloc] init] forKey:@"tabBar"];}
27.改变textfiled的placeholder的字体颜色大小