5 隐藏navigationBar上的左右键
self.navigationItem.leftBarButtonItem.hidden = YES
self.navigationController.toolbarHidden = NO;
7 设置cell的相关属性
cell.textLabel.text = controller.title;
cell.imageView.image = controller.ImageForRow;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
8 隐藏push的时候下面的tabBar(不是其他的Bar)
secondViewController.hidesBottomBarWhenPushed=YES;
9 设置TabBar的切换效果模式
tabBarController.viewControllers;
tabBarController.modalTransitionStyle=UIModalTransitionStyleCoverVertical;
10 设置tableView可以滚动
self.tableView.scrollEnabled = YES;
11 设置tableView数组内容改变后的重载
[self.tableView reloadData];
12 从plist文件中取出内容给tableView
NSString *path = [[NSBundle mainBundle] pathForResource:@"dota" ofType:@"plist"];//路径
myDotaDictionary = [[NSDictionary alloc]initWithContentsOfFile:path];//字典存储键值对
self.myKeys=[[NSArray alloc]initWithArray:[myDotaDictionary allKeys]];//取出所有键
return [myKeys count];//返回键的个数为numberOfSection
- NSString *tmp =[myKeys objectAtIndex:section];//根据section取出该组的标题 也就是键值对中的key,下一步用这个key取出对应的数组,也就是该区内容。
- NSArray *tmpArray=[myDotaDictionary objectForKey:tmp];
- return [tmpArray count]; //返回每个分区的键对应的值到数组的个数作为numberOfRows
press.minimumPressDuration = 1.0;//长按手势的最短按时间
[tapTouch requireGestureRecognizerToFail:rec7];//监视手势选择失败才判断是哪种手势
18 菜单控件
UIMenuItem *flag = [[UIMenuItem alloc] initWithTitle:@
"Flag"
action:@selector(flag:)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setTargetRect:self.frame inView:self.superview];
[menu setMenuItems:[NSArray arrayWithObjects:flag, approve, deny, nil]];
[menu setMenuVisible:YES animated:YES];
UICopyLabel *display = [[UICopyLabel alloc]initWithFrame:CGRectMake(30,100,250,30)];
21 拖拽手势的偏移 长按手势的两次响应取其一
CGPoint point = [panGesture translationInView:self.view];//拖拽的offset 可以通过point.x 判断偏移方向
longPress.state == UIGestureRecognizerStateEnded 和 press.state == UIGestureRecognizerStateBegan 判断
19 手势方向
leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
20 手机自动锁屏
[UIApplication sharedApplication].idleTimerDisabled=YES;
// 不自动锁屏
[UIApplication sharedApplication].idleTimerDisabled=NO;
// 自动锁屏
21 键盘类型
textView.keyboardType=
textView.keyboardAppearance=UIKeyboardAppearanceDefa
textField.autocorrectionType
textView.secureTextEntry=YES;
textView.returnKeyType=UIReturnKeyGo;
textField.autocapitalizationType
int count = [textView.text length];
22 UITouch触摸
[touches anyObject];
- (NSSet *)allTouches;//所有关联的UITouch
- (NSSet *)touchesForWindow:(UIWindow *)window;//指定窗口的UITouch
- (NSSet *)touchesForView:(UIView *)view//指定View上的UITouch
- (NSSet *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture
. timestamp时间戳
.tapCount触摸次数
.phase触摸状态(touchBegin或什么)
.locationInView 触摸坐标point
24 UIlabel跟随文字多少自动调整高度
label4.adjustsFontSizeToFitWidth = YES ;
CGSize msgSie = [msgLabel.text sizeWithFont:fonts constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap]; [msgLabel setFrame:CGRectMake(15, 45, 290, msgSie.height)]; [UIFont boldSystemFontOfSize:20]; //设置粗字体单独的
23 motion 移动设备和touch一样都是UIResponder的响应方式motionBegan:withEvent
motionEnded:withEvent
becomeFirstResponder、resignFirstResponderinputView、 inputAccessoryView 输入视图和输入附加视图27 statusBar
[myApp setStatusBarHidden:YES animated:YES]; //隐藏状态栏
[myApp setStatusBarStyle: UIStatusBarStyleBlackOpaque];//状态栏风格
[myApp setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
28 slider的属性
mySlider.continuous = YES ;//这个可以监听UISlider的值变全过程 比如你加了addTrget方法 那么在整个过程都会响应方法而不是你停发滑块位置才响应
29 UIPageControllermyPageControl.numberOfPages =5;myPageControl.currentPage =3;// 当前页数,第四页
myPageControl.hidesForSinglePage=YES;
30 沙盒机制
1 xxx.app文件:xib 资源文件音视频
2 Library:存储程序的默认设置或其它状态信息;
(LIbrary/Preference偏好设置文件原本的plist文件备份 Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除)
3 Documents:程序文件数据保存在该目录下 txt 写入的plist文件(备份)
4 tmp:提供一个即时创建临时文件的地方。
根目录:NSHomeDirectory()【NSCachesDirectory NSApplicationSupportDirectory NSTemporaryDirectory】
获取程序路径数组NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);//OSX方法转Ios上
获取程序路径NSString *directory = [paths objectAtIndex:0]; ......................................YES是代表展开波浪线即主路径
沙盒某文件全路径:NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"xxx.plist"];
沙盒程序全路径:[[NSBundle mainBundle] pathForResource:];
要想将用户数据或设置永久保存起来,不受 app 更新重新安装的影响,我们只能将这写数据保存在 userDefaults 中或 Documents 目录下,这两个地方在官方文档中得到明确的支持
31 数据持久化归档
NSArray NSDictionary NSData NSString 这四种元素(实现了NSCoding协议)才可以读写方法:initWithContentsOfFile writeToFile
归档的过程就是把复杂数据转成了NSData
自定义类的对象要实现归档就要实现NSCoding协议遵循 - encodeWithCoder:归档时调用 - initWithCoder解码时调用 (encodeObject: forKey decodeIntForKey)
NSString *filePath = [self filePathByName:@"yyyyy.plist"];
[[NSFileManager defaultManager] fileExistsAtPath:filePath];
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
Student *stu = (Student *) [unarchiver decodeObjectForKey:@"stuKey"];
[unarchiver finishDecoding];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:stu forKey:@"stuKey"];
[archiver finishEncoding];
[data writeToFile:[self filePathByName:@"yyyyy.plist"] atomically:YES];//写入文件到data
[archiver encodeObject(int或其他类型):];
[unarchiver decodeObjectForKey:];
32 集合类(如:NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator
[array objectEnumerator] [[set allObjects] objectEnumerator] [myEnumerator nextObject]
33 NSCharacterSet用符号分割数组
NSCharacterSet *characterSet1 = [NSCharacterSet characterSetWithCharactersInString:@
"<p/brh>"
];
NSCharacterSet *characterSet2 = [NSCharacterSet whitespaceCharacterSet];//自己建一空格符号set
NSArray *array1 = [string1 componentsSeparatedByCharactersInSet:characterSet1];
[pathArray componentsJoinedByString:@""];//
字符串数组拼接成字符串34 当前时间和日期
NSDate * senddate=[NSDate date];
NSCalendar * cal=[NSCalendar currentCalendar];
35 计算数组求和平均值
NSArray *testArray = [NSArray arrayWithObjects:@"1.0",@"4.0",@"5.0", nil];
NSNumber *sum = [testArray valueForKeyPath:@"@sum.floatValue"]; 求平均值用这个keyPath @"@avg.floatValue"
36 字符串拼接
appendString initWithFormat(还可以转换数据类型为NSString)
37 字符串比较
BOOL result = [astring01 caseInsensitiveCompare:astring02] = = NSOrderedSame;
BOOL result = [astring01 compare:astring02] = = NSOrderedAscending;
38 下标集合
NSArray * array1 = [array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
[array
replaceObjectAtIndex:3 withObject:@ "ios" ]; //将指定下标位置元素替换为指定的元素 |
[array exchangeObjectAtIndex:0 withObjectAtIndex:3];
//将指定下标的两个元素进行交换
NSArray
* array = [ptr componentsSeparatedByString:@ "
" ]; //将字符串整体作为分割条件
返回值为NSArray不可变数组 |
NSMutableArray
* array1 = [NSMutableArray arrayWithArray:array]; //若修改,则将NSArray转化为NSMutableArray |
NSArray
* array2 = [ptr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@ ",
" ]]; //以字符串中的字符作为分割条件进行分割 |
40 产生随机数的方法
//random() 需要初始化时设置种子
39 object.a=3; object.a是调用object.setA方法!! oc中使用"."符号是调用 int a =object.a 是调用的是 [object getA]; 41 respondsToSelector:方法用于判断是否已实现该方法 再直接执行performSelector:
NSLog(@ "%@" ,
[NSString stringWithFormat:@ "%.0f" ,
1.9003]); 输出为2 |
43 ios字符串的format可以对数值四舍五入 id类型已经预先被定义成一个指针类型了。所以我们不需要再加星号。
44 什么时候用delegate,什么时候用Notification?答:delegate针对one-to-one关系,并且reciever可以返回值给sender,notification 可以针对one-to-one/many/none,reciever无法返回值给sender.所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件。
47get变post
setHttpMethod:@"post"
setHttpBody:receiveData;
48 端口
80默认 如果服务器用的是8080 8028 8082端口则要写明
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL urlWithString:@"http:tm.mpay.cn:8082"]];
request.HTTPMethod = @"POST";
request.HTTPBody = requestData;//mainBundle中的xml文件
49 解析
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:receiveData options:NSJSONReadingAllowFragments error:nil];//系统解析方法
NSString *city = [jsonDic valueForKey:@"city"];//赋值给需要的地方
NSString *str = [[NSString alloc] initWithData:receiveData encoding:NSUTF8StringEncoding];
NSDictionary *jsonDic = [str objectFromJSONString];//JSON解析方法
NSString *city = [jsonDic valueForKey:@"city"];//赋值给需要的地方
GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:self.receiveData options:0 error:NULL];//XML解析方法
NSArray *nodes = [document nodesForXPath:@"//body//rows//wp_film" error:NULL]; //node就是拿到的节点
movie.movieID = [[node attributeForName:@"id"]stringValue];//用for in 遍历nodes后把相应的id的值转为stringValue赋值给需要的地方
50 去除空格NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];[username stringByTrimmingCharactersInSet:whitespace];51@class和#import的区别
1 一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来
.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你
2 在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3 在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
4 如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
52 重新加载tableView的某一行数据
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
53 拼接合并数据和字符创
可以通过[mutableData appendData:]和stringByAppendingFormat:或者stringByAppendingString:或者[NSString initWithFormat:@"%@,%@", string1, string2 ];合并拼接54 iphone默认支持的方向不包含Upside Down 因为如果手机反拿着的话来电了则以为是正的但事实上你把听筒当mic啦 界面方向是interfaceOrientation 设备方向是deviceOrientation 55为了方便,先在工程中的 .pch 文件中定义 字符串常量
#define jsonSourceURLAddress_1 @"http://m.weather.com.cn/data/101010100.html"
56 get安全性非常低,post安全性较高。但是执行效率却比Post方法好 get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制 57 在IOS开发中,存在三种类型的bundle,分别是框架bundle、应用程序bundle和设置bundle 58 UIMenuController和UIMenuItem的相关方法 UIMenuItem *itCopy = [[ UIMenuItem alloc ] initWithTitle : @" 复制 " action : @selector (handleCopyCell:)];UIMenuItem *itDelete = [[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(handleDeleteCell:)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObjects:itCopy, itDelete, nil]];
[menu setTargetRect:cell.frame inView:self];
[menu setMenuVisible:YES animated:YES];
59 创建UIActivityIndicatorView
UIActivityIndicatorView*activeView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activeView.center = CGPointMake(alert.bounds.size.width/2.0f, alert.bounds.size.height-40.0f);
[activeView startAnimating];
[alert addSubview:activeView]; 60 键盘回收和字数限制技巧很简单 - (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text textView代理方法 { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } //这个方法也可以限制输入字数 与下面的方法任选其一 if (range.location >= 10) { return NO; } //下面的单独的方法也可以写在里面 但注意返回值是BOOL if (textView.text.length > 10) { textView.text = [textView.text substringToIndex:10]; return NO; } return YES; } - (void) textViewDidChange:(UITextView *)textView //限制输入的时候的字数 { if (textView.text.length > 10) { textView.text = [textView.text substringToIndex:10]; } } 61 XML好好培训自己XML 的属性值须加引号属性值必须被引号包围单引号和双引号均可使用 与 HTML 类似,XML 也可拥有属性(名称/值的对)XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。 如果属性值本身包含双引号,那么有必要使用单引号包围它或者可以使用实体引用
<note
date="08/08/2008"
> <to>George</to> <from>John</from> </note><gangster name="George "Shotgun" Ziegler">
<gangster name='George "Shotgun" Ziegler'>
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始 小于< 大于> 与& 单引号' 双引号" 比如:<message>if salary<
1000 then</message> 编写注释<!-- This is a comment --> 62 变UIView为UIImage的方法 - (UIImage*) imageWithUIView:(UIView*) view { // 创建一个bitmap的context // 并把它设置成为当前正在使用的context UIGraphicsBeginImageContext(view.bounds.size); CGContextRef currnetContext = UIGraphicsGetCurrentContext(); //[view.layer drawInContext:currnetContext]; [view.layer renderInContext:currnetContext]; // 从当前context中创建一个改变大小后的图片 UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); // 使当前的context出堆栈 UIGraphicsEndImageContext(); return image; }63 .h中定义的所有函数都是public类型的 私有化的解决方法在.m文件中使用延展
64 完美实现cell多选打钩滑动不消失
if ([_markupArray containsObject:[_dataXMLElemetArray objectAtIndex:indexPath.row]]) { _cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { _cell.accessoryType = UITableViewCellAccessoryNone; } //在cellForRow里添加判断是否已存在保存的数组内容 UITableViewCell *cellSelected = [tableView cellForRowAtIndexPath:indexPath]; NSString *titleString = cellSelected.textLabel.text; if (cellSelected.accessoryType == UITableViewCellAccessoryNone) { cellSelected.accessoryType = UITableViewCellAccessoryCheckmark; [_markupArray addObject:[_dataXMLElemetArray objectAtIndex:indexPath.row]]; } else { cellSelected.accessoryType = UITableViewCellAccessoryNone; [_markupArray removeObject:[_dataXMLElemetArray objectAtIndex:indexPath.row]]; }//在didSelectRow里面将变化的打钩装进或删除从数组里 然后去cellForRow里面判断 65 从前往后和从后往前传值 从前往后传值和从后往前传值的区别是后者包括前者传值过程,后面需要把接收到的值赋值给前面类的实例化出来的变量然后在本类中传值过去在前面类去实现 如果你直接在后面类中引入头文件使用前面类的方法后传值不会对前面类做出影响 虽然值可以传递过去 只有你包含从前往后的过程再从后往前传才能完美参考薪酬查询地区实现66 监控电话号码等等自动加下划线
textView.dataDetectorTypes = UIDataDetectorTypeAll;
textView.editable = NO;//必须有,否则没有有下划线
67 label的attributed属性NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:text]; [attributeString setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor], NSFontAttributeName : [UIFont systemFontOfSize:17]} range:NSMakeRange(2, 1)]; myLabel.attributedText = attributeString;myLabel.adjustsFontSizeToFitWidth = YES;//这个属性可以让文字多的话合理编排
cell.textLabel.shadowColor = [UIColor grayColor];
cell.textLabel.shadowOffset = CGSizeMake(1, 1); //设置label的阴影和偏移量
68 屏幕的大小前者是整个屏幕后者是app屏幕(如不隐藏statusBar为statusBar下面的大小)
[[UIScreen mainScreen] bounds] 和[UIScreen mainScreen] applicationFrame]
69 重写UIGestureRecognizerDelegate中的shouldReveiveTouch中做判断可以防止在TableView中点击表时收拾依然有效 if(NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView") return NO;
70 移除键盘[self.view endEditing:YES];//两种方法都可以移除键盘 [self.textView resignFirstResponder];
71 self.clearsSelectionOnViewWillAppear = NO;可以防止tableView清空所有选中的cell72 NSLog(@"%@ *********- %@ - View Frame: %@", self, NSStringFromSelector(_cmd), NSStringFromCGRect(self.view.frame));可以输出当前调用的方法名和rect的大小 _cmd是系统的直接填 self.title = NSLocalizedString(@"详情", nil);这种写法可以用于本地化 但详情不论是中文还是英文好像都没什么变化 NSStringFormClass得到对应class的string73 [CATransaction begin]; [CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION]; _arrowImage.transform = CATransform3DMakeRotation((M_PI / 180.0) * 180.0f, 0.0f, 0.0f, 1.0f); [CATransaction commit];Transaction的用法有点像UIView提交动画的感觉74