杂锦2

1 用系统的toolBar先把隐藏打开后加barButtonIem后
[self setToolbarItems:[NSArray arrayWithObjects:flexItem, one, flexItem, two, flexItem, three, flexItem, four, flexItem, nil]];  
2 自定义toolBar先把隐藏关闭后加barButtonItem后
 [toolBar setItems:[NSArray arrayWithObject:addButton]]; 同样也适用于tabBar  [tabBar  setItems tabBarItemArray ];
3 可以给导航栏加一个视图标题有点像custom
self.navigationItem.titleView = segmentedController;
隐藏NavigationBar
self.navigationController.navigationBarHidden = YES;
5  隐藏navigationBar上的左右键
self.navigationItem.leftBarButtonItem.hidden = YES 
   隐藏navigationBar上的backButton
[self.navigationItem setHidesBackButton:YES]
6 隐藏navigationController的toolBar

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

  1. NSString *tmp =[myKeys objectAtIndex:section];//根据section取出该组的标题 也就是键值对中的key,下一步用这个key取出对应的数组,也就是该区内容。  
  2. NSArray *tmpArray=[myDotaDictionary objectForKey:tmp];  
  3. return [tmpArray count]; //返回每个分区的键对应的值到数组的个数作为numberOfRows
return [myKeys objectAtIndex:section];//返回每个section的title

13 index有时候需要随机生成值
index = arc4random()%5 5个数中随机生成值;音乐会用到

14 actionSheet显示位置
[actionSheet showInView:self.view];
[actionSheet  showFromToolBar: ];
[actionSheet  showFromTabBar: ];

15 设置tabBar的点击和非点击下的图片
   [navCtr. tabBarItem   setFinishedSelectedImage :[ UIImage   imageNamed : @" 个人 .png" withFinishedUnselectedImage :[ UIImage   imageNamed : @" 个人 g.png" ]];
16 三个比较统一的控件
UIPickerView  UIDatePicker(继承UIControl)  UIImagePickerController
17 手势需要的点击数和判断是点击还是双击时需使一种手势失效
tapTouch.numberOfTapsRequired = 2; 
panRecognizer.maximumNumberOfTouches = 1;

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= UIKeyboardTypeNumberPad;

textView.keyboardAppearance=UIKeyboardAppearanceDefault;

textField.autocorrectionType UITextAutocorrectionTypeYes;

textView.secureTextEntry=YES;

textView.returnKeyType=UIReturnKeyGo;

textField.autocapitalizationType UITextAutocapitalizationTypeWords;

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、resignFirstResponder
inputView、 inputAccessoryView 输入视图和输入附加视图
27 statusBar
[myApp setStatusBarHidden:YES animated:YES]; //隐藏状态栏
[myApp setStatusBarStyle: UIStatusBarStyleBlackOpaque];//状态栏风格
[myApp setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO]; 
28 slider的属性
mySlider.continuous = YES ;//这个可以监听UISlider的值变全过程 比如你加了addTrget方法 那么在整个过程都会响应方法而不是你停发滑块位置才响应

29 UIPageController
myPageControl.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 产生随机数的方法


//arc4random() 比较精确不需要生成随即种子
02//通过arc4random() 获取0到x-1之间的整数的代码如下:
03    int value = arc4random() % x;
04//获取1到x之间的整数的代码如下:
05    int value = (arc4random() % x) + 1;
06   
07//CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1]
08    float random = CCRANDOM_0_1() * 5; //[0,5]   CCRANDOM_0_1() 取值范围是[0,1]
        //random() 需要初始化时设置种子

39 object.a=3; object.a是调用object.setA方法!!  oc中使用"."符号是调用  int a =object.a 是调用的是 [object getA]; 

41 respondsToSelector:方法用于判断是否已实现该方法 再直接执行performSelector:


      
      
42 ios字符串的format可以对数值四舍五入
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 allocinitWithTitle:@"删除" 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清空所有选中的cell
72 NSLog(@"%@ *********- %@ - View Frame: %@", self, NSStringFromSelector(_cmd), NSStringFromCGRect(self.view.frame));可以输出当前调用的方法名和rect的大小 _cmd是系统的直接填  self.title = NSLocalizedString(@"详情", nil);这种写法可以用于本地化 但详情不论是中文还是英文好像都没什么变化 NSStringFormClass得到对应class的string
73  [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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值