美文网首页
记录各种iOS开发技巧

记录各种iOS开发技巧

作者: _会飞的鱼 | 来源:发表于2015-09-07 21:43 被阅读2401次

    1.返回输入键盘

    `- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    [textField resignFirstResponder];

    return YES;

    }`

    2.CGRect

    CGRectFromString(<#NSString *string#>)//有字符串恢复出矩形CGRectInset(<#CGRect rect#>, <#CGFloat dx#>, <#CGFloat dy#>)//创建较小或者较大的矩形CGRectIntersectsRect(<#CGRect rect1#>, <#CGRect rect2#>)//判断两巨星是否交叉,是否重叠CGRectZero//高度和宽度为零的,位于(0,0)的矩形常量

    3.隐藏状态栏

    ###[UIApplicationsharedApplication]setStatusBarHidden:<#(BOOL)#> withAnimation:<#(UIStatusBarAnimation)#>//隐藏状态栏

    4.自动适应父视图大小 

    self.view.autoresizesSubviews=YES;self.view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

    5.UITableView的一些方法

    这里我自己做了个测试,缩进级别设置为行号,row越大,缩进越多-(NSInteger)tableView:(UITableView*)tableView indentationLevelForRowAtIndexPath:(NSIndexPath*)indexPath{NSIntegerrow=indexPath.row;returnrow;}

    6.把plist文件中的数据赋给数组

    NSString*path=[[NSBundlemainBundle]pathForResource:@"States"ofType:@"plist"];NSArray*array=[NSArrayarrayWithContentsOfFile:path];

    7.获取触摸的点

    -(CGPoint)locationInView:(UIView*)view;-(CGPoint)previousLocationInView:(UIView*)view;

    8.获取触摸的属性

    @property(nonatomic,readonly)NSTimeIntervaltimestamp;@property(nonatomic,readonly)UITouchPhasephase;@property(nonatomic,readonly)NSUIntegertapCount;

    9.从plist中获取数据赋给字典

    NSString*plistPath=[[NSBundlemainBundle]pathForResource:@"book"ofType:@"plist"];NSDictionary*dictionary=[NSDictionarydictionaryWithContentsOfFile:plistPath];

    10.NSUserDefaults注意事项

    设置完了以后如果存储的东西比较重要的话,一定要同步一下[[NSUserDefaultsstandardUserDefaults]synchronize];

    11.获取Documents目录

    NSString*documentsDirectory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];

    12.获取tmp目录

    NSString*tmpPath=NSTemporaryDirectory();

    13.利用Safari打开一个链接

    NSURL*url=[NSURLURLWithString:@"http://baidu.com"];[[UIApplicationsharedApplication]openURL:url];

    14.利用UIWebView显示pdf文件,网页等等

    UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];

    webView.delegate = self;

    webView.scalesPageToFit = YES;

    webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [webView setAllowsInlineMediaPlayback:YES];

    [self.view addSubview:webView];

    NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@"book" ofType:@"pdf"];

    NSURL *url = [NSURL fileURLWithPath:pdfPath];

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:5];

    15.UIWebView和html的简单交互

    myWebView=[[UIWebViewalloc]initWithFrame:self.view.bounds];[myWebView loadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://www.baidu.com"]]];NSError*error;NSString*errorString=[NSStringstringWithFormat:@"AnError Occurred;
    %@",error];[myWebView loadHTMLString:errorString baseURL:nil];//页面跳转了以后,停止载入-(void)viewWillDisappear:(BOOL)animated{if(myWebView.isLoading){[myWebView stopLoading];}myWebView.delegate=nil;[UIApplicationsharedApplication].networkActivityIndicatorVisible=NO;}

    16.汉字转码

    NSString*oriString=@"\u67aa\u738b";NSString*escapedString=[oriString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    17.处理键盘通知

    先注册通知,然后实现具体当键盘弹出来要做什么,键盘收起来要做什么-(void)registerForKeyboardNotifications{keyboardShown=NO;//标记当前键盘是没有显示的[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWasShown:)name:UIKeyboardWillShowNotificationobject:nil];[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWasHidden:)name:UIKeyboardDidHideNotificationobject:nil];}//键盘显示要做什么-(void)keyboardWasShown:(NSNotification*)notification{if(keyboardShown){return;}NSDictionary*info=[notification userInfo];NSValue*aValue=[info objectForKey:UIKeyboardFrameBeginUserInfoKey];CGSizekeyboardSize=[aValueCGRectValue].size;CGRectviewFrame=scrollView.frame;viewFrame.size.height=keyboardSize.height;CGRecttextFieldRect=activeField.frame;[scrollView scrollRectToVisible:textFieldRect animated:YES];keyboardShown=YES;}-(void)keyboardWasHidden:(NSNotification*)notification{NSDictionary*info=[notification userInfo];NSValue*aValue=[info objectForKey:UIKeyboardFrameEndUserInfoKey];CGSizekeyboardSize=[aValueCGRectValue].size;CGRectviewFrame=scrollView.frame;viewFrame.size.height+=keyboardSize.height;scrollView.frame=viewFrame;keyboardShown=NO;}

    18.点击键盘的next按钮,在不同的textField之间换行

    -(BOOL)textFieldShouldReturn:(UITextField*)textField{if([textField returnKeyType]!=UIReturnKeyDone){NSIntegernextTag=[textField tag]+1;UIView*nextTextField=[self.tableView viewWithTag:nextTag];[nextTextField becomeFirstResponder];}else{[textField resignFirstResponder];}returnYES;}

    19.设置日期格式

    dateFormatter=[[NSDateFormatteralloc]init];dateFormatter.locale=[NSLocalecurrentLocale];dateFormatter.calendar=[NSCalendarautoupdatingCurrentCalendar];dateFormatter.timeZone=[NSTimeZonedefaultTimeZone];dateFormatter.dateStyle=NSDateFormatterShortStyle;NSLog(@"%@",[dateFormatter stringFromDate:[NSDatedate]]);

    20.加载大量图片的时候,可以使用

    NSString*imagePath=[[NSBundlemainBundle]pathForResource:@"icon"ofType:@"png"];UIImage*myImage=[UIImageimageWithContentsOfFile:imagePath];

    21.有时候在iPhone游戏中,既要播放背景音乐,同时又要播放比如枪的开火音效。

    NSString*musicFilePath=[[NSBundlemainBundle]pathForResource:@"xx"ofType:@"wav"];NSURL*musicURL=[NSURL fileURLWithPath:musicFilePath];AVAudioPlayer*musicPlayer=[[AVAudioPlayeralloc]initWithContentsOfURL:musicURL error:nil];[musicPlayer prepareToPlay];musicPlayer.volume=1;musicPlayer.numberOfLoops=-1;//-1表示一直循环

    22.从通讯录中读取电话号码,去掉数字之间的-

    NSString*originalString=@"(123)123123abc";NSMutableString*strippedString=[NSMutableStringstringWithCapacity:originalString.length];NSScanner*scanner=[NSScannerscannerWithString:originalString];NSCharacterSet*numbers=[NSCharacterSetcharacterSetWithCharactersInString:@"0123456789"];while([scanner isAtEnd]==NO){NSString*buffer;if([scanner scanCharactersFromSet:numbers intoString:&buffer]){[strippedString appendString:buffer];}else{scanner.scanLocation=[scanner scanLocation]+1;}}NSLog(@"%@",strippedString);

    23.正则判断:字符串只包含字母和数字

    NSString*myString=@"Letter1234";NSString*regex=@"[a-z][A-Z][0-9]";NSPredicate*predicate=[NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];if([predicate evaluateWithObject:myString]){//implement}

    24.设置UITableView的滚动条颜色

    self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite;

    网络编程 开发web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过apple的审查的。 系统自带的网络检查是原生的,AFNetworking也为我们添加了相关检测机制,所以这个直接在介绍AFNetworking的时候详解吧。

    25.使用NSURLConnection下载数据

    1.创建对象NSMutableURLRequest*request=[NSMutableURLRequestrequestWithURL:[NSURLURLWithString:@"http://www.baidu.com"]];[NSURLConnectionconnectionWithRequest:requestdelegate:self];2.NSURLConnectiondelegate委托方法-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{}-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{}-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{}-(void)connectionDidFinishLoading:(NSURLConnection*)connection{}3.实现委托方法-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{self.receiveData.length=0;//先清空数据}-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{[self.receiveData appendData:data];}-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{//错误处理}-(void)connectionDidFinishLoading:(NSURLConnection*)connection{[UIApplicationsharedApplication].networkActivityIndicatorVisible=NO;NSString*returnString=[[NSStringalloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];firstTimeDownloaded=YES;}

    iOS的动画以及自定义图形,开个专栏总结。

    26.隐藏状态栏

    [UIApplicationsharedApplication].statusBarHidden=YES;

    27..m文件与.mm文件的区别

    .m文件是objective-c文件.mm文件相当于c++或者c文件

    Safari其实没有把内存的缓存写到存储卡上

    28.读取一般性文件

    -(void)readFromTXT{NSString*tmp;NSArray*lines;//将文件转化为一行一行的lines=[[NSStringstringWithContentsOfFile:@"testFileReadLines.txt"]componentsSeparatedByString:@"\n"];NSEnumerator*nse=[lines objectEnumerator];//读取<>里的内容while(tmp==[nse nextObject]){NSString*stringBetweenBrackets=nil;NSScanner*scanner=[NSScannerscannerWithString:tmp];[scanner scanUpToString:@"<"intoString:nil];[scanner scanString:@"<"intoString:nil];[scanner scanUpToString:@">"intoString:&stringBetweenBrackets];NSLog(@"%@",[stringBetweenBrackets description]);}}

    29.隐藏UINavigationBar

    [self.navigationController setNavigationBarHidden:YES animated:YES];

    30.调用电话,短信,邮件

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"mailto:apple@mac.com?Subject=hello"]];sms://调用短信tel://调用电话itms://打开MobileStore.app

    31.获取版本信息

    UIDevice*myDevice=[UIDevicecurrentDevice];NSString*systemVersion=myDevice.systemVersion;

    32.UIWebView的使用

    webView.delegate = self;

    (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSURL *url = request.URL;

    NSString *urlStirng = url.absoluteString;

    NSLog(@"%@",urlStirng);

    return YES;

    }

    UIButton的title和image不能同时显示UINavigationItem也是

    33.NSNotificationCenter带参数发送

    MPMoviePlayerController*theMovie=[[MPMoviePlayerControlleralloc]initWithContentURL:[NSURL fileURLWithPath:moviePath]];[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(myMovieFinishedCallback:)name:MPMoviePlayerPlaybackDidFinishNotificationobject:theMovie];[theMovie play];-(void)myMovieFinishedCallback:(NSNotification*)aNotification{MPMoviePlayerController*theMovie=[aNotificationobject];[[NSNotificationCenterdefaultCenter]removeObserver:selfname:MPMoviePlayerPlaybackDidFinishNotificationobject:theMovie];}

    34.延迟一段时间执行某个函数

    [selfperformSelector:@selector(dismissModal)withObject:selfafterDelay:1.0];

    35.用NSDateFormatter调整时间格式代码

    NSDateFormatter*dateFormatter=[[NSDateFormatteralloc]init];dateFormatter.dateFormat=@"yyyy-MM-dd HH:mm:ss";NSString*currentDateStr=[dateFormatter stringFromDate:[NSDatedate]];

    36.UIView设置成圆角的方法

    mainView.layer.cornerRadius=6;mainView.layer.masksToBounds=YES;

    Objective-C 内存管理

    一个对象可以有一个或多个拥有者

    当它一个拥有者都没有的时候,它就会被回收

    如果想保留一个对象不被回收,你就必须成为它的拥有者

    关键字

    alloc 为对象分配内存,计数设为1,并返回此对象。

    copy 复制一个对象,此对象计数为1,返回此对象。你将成为此克隆对象的拥有者。

    retain 对象计数+1,并成为次对象的拥有者。

    release 对象计数-1,并丢掉此对象。

    autorelease 在未来的某一个时刻,对象计数-1。并在未来的某个时间放弃此对象。

    原则

    一个代码块内要确保copy,alloc 和 retain 的使用数量与 release 和 autorelease 的数量相等。

    在使用以 alloc 或 new 开头或包含 copy 的方法,或 retain 一个对象时,你将会编程它的拥有者。

    实现 dealloc 方法,这是系统当 retain -> 0 的时候,自动调用的。手动调用会引起 retain count 计数错误(多一次的 release)。

    iPhone 更改键盘右下角按键的 type

    SearchBar*mySearchBar=[[UISearchBaralloc]init];mySearchBar.frame=CGRectMake(0,0,self.view.bounds.size.width,44);mySearchBar.placeholder=@"placeholderString";mySearchBar.delegate=self;[self.view addSubview:mySearchBar];UITextField*searchField=[[mySearchBar subviews]lastObject];searchField.returnKeyType=UIReturnKeyDone;

    总结

    不积跬步无以至千里,不积小流无以成江海。

    相关文章

      网友评论

          本文标题:记录各种iOS开发技巧

          本文链接:https://www.haomeiwen.com/subject/faoucttx.html