1)重写touchesBegan方法, 点击屏幕的时候隐藏键盘
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=[[event allTouches] anyObject];
if (touch.tapCount >=1) {
[meter resignFirstResponder];
[feet resignFirstResponder];
}
}git
至关于屏幕任何位置的点击事件(除了各组件的点击处)能够在这个方法里执行要隐藏或remove的view.github
2)重写textField的delegate中的-(BOOL)textFieldShouldReturn:(UITextField *)textField方法,在点击return的时候调用方法,让textField放弃
sql
第一响应者.数据库
3)在最底层铺上一个透明的button活着controller,时间相应为回收键盘.api
3.UINavigationBar的控件设置app
UINavigationBar (导航栏)上的设置主要分两部分, 为导航栏上的各类导航部件(UINavigationItem), 为导航栏的相关设置.navigationBar—导航条,iOS7以后默认是半透明的,iOS7以前默认是不透明的。 navigationBar 竖屏下默认高度44,横屏下默认高度32。 iOS7以后,navigationBar的背景会延伸到statusBar上。导航栏高度仍保持44,但显示效果为64。 每一个视图控制器都有一个UINavigationItem属性。UINavigationItem中设置的左按钮、右按钮、标题等,会随着控制器的显 ,也显示到NavigationBar上。 iview
self.navigationItem.title = @"老炮儿"; //修改本身试图的标题ide
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;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"XXX.png"] forBarMetrics:UIBarMetricsDefault];
IOS5.0以上,api有了上面setBackgroundImage的方法,能够直接设置,若是项目须要适配5.0如下版本的设备,最好加一个判读,是否有此函数,有则设置,没有就经过drawRect方法设置。
另外:设置背景图片没法匹配backButton或rightButtonItem,因此返回按钮或右边自定义的Bar button Item须要自行处理。
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:12.] forKey:NSFontAttributeName]]; //修改字体大小
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor redColor] forKey:NSForegroundColorAttributeName]]; //修改字体颜色
self.navigationController.hidesBarsOnSwipe = YES;
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];
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,本身去控制留白以及坐标问题。
[view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pabb_leftnaviview_bg.png"]]];
大小设置:
[view setFrame:CGRectMake(9, 60, 120, 250)];
相似于图1,我不想让下面的那些空显示。很简单,添加“self.tableView.tableFooterView = [[UIView alloc] init];”
试过都说好,加完这句以后就变成了图2的样子
.
在model类中的.h文件中声明属性,以获取后台返回数据,名称,类型相同
在存储数据时(通常在VC中)
根据后台返回的数据的数据类型,设置显示用的cell样式
根据要cell在的位置,设置要显示的cell的样式
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;
}}
//获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)
-(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;
首先本身定义一个NSCharacterSet, 包含须要去除的特殊符号
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];
因为NSString中有全角符号和半角符号, 所以有些符号要包括全角和半角的
而后调用stringByTrimmingCharactersInSet
NSString *trimmedString = [string stringByTrimmingCharactersInSet:set];
trimmedString就是过滤后的字符串
取出字符串中的空格
http://my.oschina.net/u/2361492/blog/487703?fromerr=pgTCOpmI
关于NSCharacterSet的一些深层次的简介
使用 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也没用。如此一来,若是想要这些控件具备交互性能怎么办?有一种很直观的方法,给这个控件加上手势识别器
27.改变textfiled的placeholder的字体颜色大小