IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理
IOS开发中会频繁用到一些代码段,用来实现一些固定的功能。比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成。或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,如何使用定时器完成一些耗时的模拟以及其他的一些功能。
在从一个新手到逐渐学会各种功能、代码、控件、方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解。所以在这儿记录下这些东西,用来提醒自己,让自己在以前花时间学过的知识上不要因为遗忘而花费更多的时间。
言归正传,以下是总结出来的常用代码段的目录(点击可直接跳转到代码处):
三、如何获取屏幕分辨率进而完成不同分辨率设备的UI布局自动适配。
以上目录中中各功能的详细代码如下:
1 //输入完后点击输入框空白处让键盘消失 2 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 3 // password为文本输入控件 4 [password resignFirstResponder]; 5 }
1 <key>NSAppTransportSecurity</key> 2 <dict> 3 <key>NSAllowsArbitraryLoads</key> 4 <true/> 5 </dict>
注意以上代码段用法为:右键Info.plist文件并使用Source Code打开,然后在里面随便一个键值对之后插入以上5行代码,即可。
三、如何获取屏幕分辨率进而完成不同分辨率设备的UI布局自动适配:
1 //屏幕尺寸 2 CGRect rect = [[UIScreen mainScreen] bounds]; 3 CGSize size = rect.size; 4 CGFloat width = size.width; 5 CGFloat height = size.height; 6 NSLog(@"print %f,%f",width,height); 7 8 //分辨率 9 CGFloat scale_screen = [UIScreen mainScreen].scale; 10 width*scale_screen,height*scale_screen
1、初始化定时器,设置定时间隔,触发方法,是否重复等:
1 NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(load:) userInfo:nil repeats:YES];
2、设置定时器方法,在每个定时间隔出发一次方法,可以在方法中关闭定时器:
1 -(void)load:(id)sender{ 2 count++; 3 if (myProgressView.progress <1) { 4 5 myProgressView.progress += 0.01*count/10; 6 myLabel.text = [NSString stringWithFormat:@"%.0f%%",myProgressView.progress*100]; 7 8 }else{ 9 10 [myTimer invalidate]; 11 12 } 13 14 }
1、创建buttom:
1 // 创建buttom,初始化尺寸大小及定位
2 UIButton *myBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 214, 80)];
3 // 设置背景色
4 myBtn.backgroundColor = [UIColor orangeColor];
5 // 设置圆角
6 myBtn.layer.cornerRadius = 20;
7 // 设置圆角遮罩允许
8 myBtn.layer.masksToBounds = YES;
9 // 使能button,默认为YES
10 myBtn.enabled = YES;
11 // 设置文字
12 [myBtn setTitle:@"开始按钮" forState:UIControlStateNormal];
13 // 添加点击事件
14 [myBtn addTarget:self action:@selector(myBtnAction:) forControlEvents:UIControlEventTouchUpInside];
15 // 添加buttom到当前view
16 [self.view addSubview:myBtn];
2、添加点击事件:
1 -(void)myBtnAction:(UIButton*)sender{ 2 sender.backgroundColor = [UIColor redColor]; 3 }
1 -(instancetype)init{ 2 if (self = [super init]) { 3 // 初始化设置 4 self.title = @"动画"; 5 [self.tabBarItem setImage:[UIImage imageNamed:@"movie_projector_filled"]]; 6 } 7 // 返回self 8 return self; 9 }
举一个例子,如果我们要在点击一个按键之后,让这个按键变透明,那我们的做法是在按键的触发事件中让按键的alpha值变为0就可以,但这样的话当按下按键之后按键瞬间就变透明了,如果让它逐渐变淡效果就会好很多,通过动画就可以实现这种效果。可以通过设置动画的时长来控制按键从开始变透明到结束需要的时间,具体代码如下:
1 [UIView animateWithDuration:1 animations:^{ 2 <#code#> 3 } completion:^(BOOL finished) { 4 <#code#> 5 }]
其中animateWithDuration:1是设置动画的时长为1s。
代码中两处<#code#>,第一个<#code#>的位置,就是你要添加的动画的代码,比如我想让按键按下之后让按键自己变透明,那就在第一个<#code#>处增加一句:
1 sender.alpha = 0;
想让按键在完成1s的动画之后又恢复原本的颜色,那就在第二个<#code#>的位置添加如下代码:
1 sender.alpha = 1;
整体代码如下:
1 -(void)btnAction:(UIButton *)sender{ 2 // 添加动画,动画时长为1s 3 [UIView animateWithDuration:1 animations:^{ 4 // 需要添加动画效果的语句 5 sender.alpha = 0; 6 } completion:^(BOOL finished) { 7 // 动画效果完成后的语句 8 sender.alpha = 1; 9 }]; 10 }
弹出框、警示框在软件中是非常常用的,当用户输入了错误的用户名或者密码的时候,软件弹出一个警示框告知用户输入错误,要求重新输入或直接提供一个帐号密码输入框供用户重新输入,以下是一个警示框的完整代码,放在被触发的事件处理中就可以:
1 // 新建一个弹出框设置标题,提示内容,以及样式 2 UIAlertController *alert=[UIAlertController alertControllerWithTitle:@"提示" message:@"这里时提示用" preferredStyle:UIAlertControllerStyleAlert]; 3 4 // 给弹出框添加输入框 5 [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { 6 textField.keyboardType=UIKeyboardTypeDefault; 7 }]; 8 9 10 // 给弹出框设置密码输入框 11 [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { 12 textField.secureTextEntry=YES; 13 textField.keyboardType=UIKeyboardTypeNumberPad; 14 textField.returnKeyType=UIReturnKeySearch; 15 }]; 16 // 17 18 19 // 给弹出框增加警示作用的红色按钮 20 [alert addAction:[UIAlertAction actionWithTitle:@"警示" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { 21 NSLog(@"用户点击了取消"); 22 }]]; 23 24 // 给弹出框增加取消按钮 25 [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 26 NSLog(@"用户点击了取消"); 27 }]]; 28 29 // 给弹出框增加确认按钮点击确认后读取输入框内容并打印 30 [alert addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 31 NSLog(@"点击了确认"); 32 33 // 读取弹出框中的输入框里的内容[[alert textFields]objectAtIndex:0].text,并打印
34 NSString *textfield0text =[[alert textFields]objectAtIndex:0].text;
35 NSString *textfield1text =[[alert textFields]objectAtIndex:1].text;
36 NSLog(@"%@ %@", textfield0text,textfield1text);
37
38 }]];
39
40 // 把弹出框呈现在控制器视图上,选择有动画效果。这一步很关键。
41 [self presentViewController:alert animated:YES completion:nil];
1 // 创建并初始化菊花 2 activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 3 // 背景色,设置alpha为0,背景色是透明的 4 activity.backgroundColor = [UIColor colorWithRed:1.000 green:0.941 blue:0.912 alpha:0]; 5 // 设置中心为当前view的中心 6 activity.center = self.view.center; 7 // 设置菊花颜色 8 activity.color = [UIColor darkGrayColor]; 9 // 设置圆角 10 activity.layer.cornerRadius = 5; 11 activity.layer.masksToBounds = YES; 12 // 添加到当前view 13 [self.view addSubview:activity]; 14 // 开始旋转菊花 15 [activity startAnimating]; 16 // 停止旋转菊花 17 [activity stopAnimating];
1 // 初始化UITextView并设置位置,大小 2 myTextView = [[UITextView alloc]initWithFrame:CGRectMake(100, 100, 300, 200)]; 3 // 设置背景色 4 myTextView.backgroundColor = [UIColor grayColor]; 5 // 设置字体 6 myTextView.font = [UIFont systemFontOfSize:20.0]; 7 // 设置要显示的文本 8 myTextView.text = @"this is a textview!"; 9 // 设置是否允许编辑 10 myTextView.editable = YES; 11 // 设置是否允许滑动 12 myTextView.scrollEnabled = YES; 13 // 设置文字对齐方式 14 myTextView.textAlignment = NSTextAlignmentLeft; 15 // 设置键盘返回键的类型 16 myTextView.returnKeyType = UIReturnKeySearch; 17 // 设置键盘类型 18 myTextView.keyboardType = UIKeyboardTypeNamePhonePad; 19 // 设置字体颜色 20 myTextView.textColor = [UIColor blackColor]; 21 // 添加到当前view 22 [self.view addSubview:myTextView];
通过给NSString类扩展一个方法,用来获取字体高度,进而设置文本框的高度:
NSString+SizeToFit.h:
1 // 2 // NSString+SizeToFit.h 3 // constellation 4 // 5 // Created by Yuri on 15/7/21. 6 // Copyright (c) 2015年 XiaofeiZhang. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import <UIKit/UIKit.h> 11 @interface NSString (SizeToFit) 12 /** 13 *返回值是该字符串所占的大小(width, height) 14 *font : 该字符串所用的字体(字体大小不一样,显示出来的面积也不同) 15 *maxSize : 为限制改字体的最大宽和高(如果显示一行,则宽高都设置为MAXFLOAT, 如果显示为多行,只需将宽设置一个有限定长值,高设置为MAXFLOAT) 16 */ 17 -(CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize; 18 @end
NSString+SizeToFit.m:
1 // 2 // NSString+SizeToFit.m 3 // constellation 4 // 5 // Created by Yuri on 15/7/21. 6 // Copyright (c) 2015年 XiaofeiZhang. All rights reserved. 7 // 8 9 #import "NSString+SizeToFit.h" 10 11 @implementation NSString (SizeToFit) 12 13 - (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize { 14 15 //返回字符串所占用的尺寸. 16 NSDictionary *attrs = @{NSFontAttributeName : font}; 17 return [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size; 18 19 } 20 @end
使用方法:
//textView的代理方法 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ // 计算mytextview.text的文字的高度并返回给size CGSize size = [mytextview.text sizeWithFont:[UIFont systemFontOfSize:20] maxSize:CGSizeMake(300, MAXFLOAT)]; // 使用计算的高度设置mytextview控件的高度 mytextview.frame = CGRectMake(0, 200, 300, size.height); return YES; }
这样当在mytextview中输入文字时,mytextview的高度就会发生变化。
1 // 打电话 其中XXXXXXXXXXX为要拨打的电话 2 NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",@"XXXXXXXXXXX"]; 3 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
1 [[UIDevice currentDevice]systemVersion];