iOS:iOS笔记

IBAction表示当前为事件方法:
- (IBAction)方法名{
   ...
}


@property表示变量,以下为控件拖线后生成的变量名:
@property (weak, nonatomic) IBOutlet UITextField *变量名;


获取文本框值:
NSString *str = self.自定义名称.text
将NSString转为int:
int num = [str intValue];

int num = str.intValue;


将int转为NSString类型并给Label设值:
self.自定义属性名.text = [NSString stringWithFormat:@"%d", num];


文件框调出键盘:
[self.自定义名称 resignFirstResponder];

[self.view endEditing;YES];  //一般用这种方式


隐藏键盘,去掉输入框焦点:
[self.view endEditing:YES];

在代码中动态创建控件(按钮):
- (void)viewDidLoad {  //当全局的View加载完毕后会调用这个方法
   [super viewDidLoad];
   UIButton *btn = [[UIButton alloc] init]; //调用UIButton控件的init方法创建一个按钮控件
   [btn setTitle:@"默认显示的文字" forState:UIControlStateNormal];  //设置默认下显示的文本
   [btn setTitle:@"高亮显示的文字" forState:UIControlStateHighlighted];  //设置高亮下显示的文本
   [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];  //设置默认下文字颜色
   [btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];  //设置高亮下文字颜色
   UIImage *img = [UIImage imageNamed:@"图片名称"]  //引入图片资源
   [btn setBackgroundImage:img forState:UIControlStateNormal];  //设置默认下背景
   [btn setBackgroundImage:img forState:UIControlStateHighlighted];  //设置高亮下背景
   btn.frame = CGRectMake(1, 1, 1, 1);  //设置按钮的位置与宽高
   [btn addTarget:self action:@selector(方法名) forControlEvents:UIControlEventTouchUpInside]; //设置点事件时触发指定的方法
   [self.view addSubview:btn];  //将按钮加入当前View中
}


UIButton内容左对齐
UIButton引用.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;


UIButto内容的内边距
UIButton引用.contentEdgeInsets = UIEdgeInsetsMake(left, top, right, bottom);


UIButto标题距离左边的边距
UIButton引用.titleEdgeInsets = UIEdgeInsetsMake(left, top, right, bottom);




获取按钮位置与大小信息:
CGRect rect = self.按钮变量.frame; //这个frame包含大小与xy坐标
int x = rect.origin.x;  //x坐标
int y = rect.origin.y;  //y坐标
int width = rect.origin.width; //宽度
int height = rect.origin.height; //高度


修改位置与大小信息(不能直接修改结构体里的变量,要先取出frame结构体赋值给另一变量,最重新赋值给原结构体)
rect.origin.x = 10;             //修改x轴位置
rect.origin.y = 10;             //修改y轴位置
rect.size.width = 10;           //修改宽度
rect.size.height = height;      //修改高度
self.按钮变量.frame = rect;

CGRect:
frame:位置和大小(origin.x、origin.y、size.width、size.height)
center:位置(origin.x、origin.y)
bounds:大小(size.width、size.height)
transform:旋转和平移

图片内存释放问题
通过UIImage *img = [UIImage imageNamed:图片名称];这种方式,图片不会释放
通过UIImage *img = [UIImage imageWithContentsOfFile:图片路径];这种方式,图片会自动释放


获取当前View下所有子View
for(UIView *v in self.view.subviews){
   
}


获取当前View的父View
UIView *parentV = self.当前View引用.superview;


根据tag获取某个控件
UITextField *tf = (UITextField *)[self.view wiewWithTag:tag值];


删除第1个子View
[self.view.subviews.firstObject removeFormSuperview];


删除自已View
[View引用 removeFromSuperview];


利用plist文件引入图片列表
(1)在Supporting Files中创建 pic.plist文件 ,新建N个item,并设置图片名称和描述
(2)在定义代码中定义属性:
@property (nonatomic, strong) NSArray *pic;
(3)在实现代码中加载,重写pic属性的get方法,懒加载方式:
- (NSArray *)pic {
    if(_pic == nil) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"pic.plist" ofType:nil];  //获取pic.plist文件的路径,mainBundle表示获取手机上的此APP安装时的根目录
        NSArray *arr = [NSArray arrayWithContentsOfFile:path];  //将资源获取赋值给数组
        _pic = array;  //赋值
    }
}
(4)将图片显示到UIImageView
NSDictionary *dict = self.pic[序号];
self.图片控件引用.image = [UIImage imageNamed:dict[@"在plist中定义的图片名称"]];


设置UIImageView显示图片的模式
UIImageView引用.contentMode = UIViewContentModeCenter;  //居中显示


设置UIImageView显示图片超出控件时不截掉
UIImageView引用.clipsToBounds = NO;


获取控件最大x值
CGFloat x = CGRectGetMaxX(控件引用.frame);


获取控件最大y值
CGFloat y = CGRectGetMaxY(控件引用.frame);


设置UILabel属性
UILabel *lb = [[UILabel alloc] init];
lb.font = [UIFont systemFontOfSize:字号];   //字号为整型
lb.textAlignmeent = NSTextAlignmentCenter;  //居中对齐


xib使用(主要为了建立子布局,再建立子自定义View,两者通过拖动控件关联后,在主Control中直接使用自定义View)
1.使用默认的方式,xib文件继承UIView
(1)新建空的xib文件,在内部布局控件,并将Class属性改成自定义View(在作为UITableView单行View时需要右上角属性按钮 -> Identifier中输入tag值,在UITableView重用时使用)
(1)创建自定义View,继承UIView
(2)将xib中的控件拖动到自定义View.m中,定义成属性,将加载xib文件的代码封装在内部,在外部Control时直接调用此自定义View的这个方法加载xib文件
NSBundle *rootB = [NSBundle mainBundle];  //获取应用根目录
UIView *itemV = [[rootB loadNibNamed:@"xib文件名" owner:nil options:nil] lastObject];  //找到xib文件
(3)在主ViewController.m中直接import自定义View.h,并直接取出自定义View内部的子控件使用


设置Label圆角效果:
Label引用.layer.cornerRadius = 5;   //设置四周圆角的半径
Label引用.layer.masksToBounds = YES;  //把四角多余部分裁剪掉


改变状态栏颜色为白色
- (UIStatusBarStyle)preferredStatusBarStyle{  //重写ViewController.m文件中的preferredStatusBarStyle方法
   return UIStatusBarStyleLightContent;  //返回白色值
}


隐藏状态栏
- (BOOL)prefersStatusBarHidden{   //重写ViewController.m文件中的prefersStatusBarHidden方法 
   return YES;  //返回YES为隐藏
}


UIButton设置不能被点击
右上角属性按钮- > Interaction中去掉"User Interaction Enabled"的勾选
或代码设置
self.view引用.userInteractionEnabled = NO;


UIButton设为显示图片控件时,去掉点击时变灰效果
右上角属性按钮- > Drawing中去掉"Highlighted Adjusts Image"的勾选


UIButton设置文字左边的图标
右上角属性按钮- > Image中输入图片名称
或代码方式:
[self.UIButton引用 setImage:[UIImage imageNamed:@"图片名称"] forState:UIControlStateNormal];


让在输入属性定义代码时自动补全
右下角"{}"图标 - > 点击"@property with copy" ->在弹出的编辑框中点"Edit" -> 输入"Title"的内容(随意) -> 输入"Completion Shortout"的内容(快捷键) -> 在空白编辑处输入"@property (nonatomic, copy) NSString *<#属性名#>;"  //NSString可以换成其他类型


将某个View设为最顶层显示
[self.view bringSubviewToFront:self.view引用];


让view内部的每个子view调一次removeFromSuperview方法执行自删除(内部有循环调用)
[sekf.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];


隐藏当前view
view引用.hidden = YES;


获取当前状态下UIButton文字
NSString *str = UIButton引用.currentTitle;


将NSString转成int类型
NSString* str = @"1";
int num = str.intValue;


截取字符串
NSString *str = [@"原串" substringToIndex:1]  //截取字符串中的第1个字符


可变字符串(类似java中的StringBuff...)
NSMutableString *ms = [NSMutableString string];
[ms appendString:@"字符串"];


判断字符串内容是否相等
if([@"" isEqualToString:ms]){   //ms为上面的NSMutableString
   ...
}


延时指定秒数后执行指定方法
[self performSelector:@selector(方法名) withObject:nil afterDelay:秒数];  //秒数为int类型


使用UIAlertView弹出对话框
(1)创建对话框
UIAlertView *dialog = [UIAlertView alloc] initWithTitle:@"标题" message:@"内容" delegate:self cancelButtonTitle:@"第0个按钮名称" otherButtonTitles:@"第1个按钮名称", @"第2个按钮名称", nil];


(2)显示对话框
[dialog show];
(3)使用代理监听点击事件(在ViewController.m中)
@interface ViewController () <UIAlertViewDelegate>   //使用代理(类似java中的implements)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{  //重写UIAlertView中按钮点击方法,buttonIndex从0开始
    //根据buttonIndex值判断哪个按钮点的,添加相关代码
    ...
}


资源中图片的区别
图片名:非视网膜屏幕,1点==1px像素
@2x图片名:视网膜屏幕,1点==2px像素
@3x图片名:视网膜屏幕,1点==3px像素


设置APP图标
打开Images.xcassets -> 点击中间的AppIcon -> 将图标拖动到布局中的空格中,会自动添加


设置APP启动图
方法1:
选中项目 -> 在中间处点击"App Icons and Launch Images"中的"Launch Images Source" -> 在弹出框中选择"Images"点"Migrate按钮" -> Launch Images Source中改成LaunchImage,删除下面的Launch Screen File值 -> 打开Images.xcassets,将图片拖入中间框中,会自动加载

选中项目 -> 在中间处点击"App Icons and Launch Images"中的"Launch Images Source" -> 在弹出框中选择"Images"点"Migrate按钮" -> Launch Images Source中改成LaunchImage,删除下面的Launch Screen File值 -> 打开Images.xcassets,点LaunchImage,可拖动图片放入。
方法2(iOS7上不支持):
点点LaunchScreen.xib,在中间点View,布局控件


UIPageControl实现分页指示器(小圆点)
self.UIPageControl引用.numberOfPages = 总页数;
self.UIPageControl引用.currentPage = 0;  //设为当前页为第1页
self.UIPageControl引用.hidesForSinglePage = YES;   //只有一页时是否隐藏页码批示器,YES为隐藏,NO为否
self.UIPageControl引用.pageIndicatorTintColor = ;  //其他页码颜色
self.UIPageControl引用.currentPageIndicatorTintColor = ;  //当前页码颜色


NSTimer定时器(时间间隔大时使用,以秒为单位)
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:时间间隔秒数 target:self selector:@selector(执行的方法名) userInfo:nil repeats:YES];  //启动计时器
[timer invalidate];  //停止计时器
timer = nil; //设为空
//修改timer的优先级和控件一样
NSRunLoop *loop = [NSRunLoop currentRunLoop];
[loop addTimer:self.timer forMode:NSRunLoopCommonModes];


CADisplayLink(时间间隔小时使用,以毫秒为单位)


获取顶层View的大小与位置
NSStringFromCGRect(self.view.frame);

UIActivityIndicatorView使用(转动加载控件)
(1)在Text->Plain中输入“加载中”的文字 //显示文字
(2)Behavior -> 选中Animating和Hides When Stopped 这两个属性  //执行动画,隐藏时停止动画


自定义控件(.m文件中)
@class MyView;  //自定义控件名称
@protocol MyViewDelegate <NSobject, UIScrollViewDelegate>  //定义代理协议实现的方法
@required   //表示必须要实现此方法
- (void) setData:(MyView *) myView;  //自定义一个代理方法
@end
@interface MyView: UIView  //继承UIView
@property (nonatomic, weak) id<MyViewDelegate> delegate; //定义属性,UI控件的代理协议定义必须用weak
@end


判断当前是否已实现了代理中的方法
if([self.delegate respondsToSelector:@selector(代理方法名:)]){
   //[self.delegate 代理方法:self];
}


延时执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(秒数 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
   //要执行的代码
});


//让UITableView滚到指定行
NSIndexPath *index = [NSIndexPath indexPathForRow:@某一行position inSection:0]; //一个对象行
[self.UITableView引用 scrollToRowAtIndexPath:index atScrollPosition: UITableViewScrollPosition animated:YES];


//当自定义View加载完成后,这方法会被调用
- (void)awakeFromNib{
}


自定义UITableView(继承UITableView)
(1)重写initWithStyle方法,用于给item创建自定义布局
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *) reuseIdentifier{
   //给每行添加自定义控件,如
   UILabel *tv = [[UILabel alloc] init];
   [self.contentView addSubview:tv];
   return self;
}


设置UILabel圆角
UILabel引用.layer.cornerRadius = 圆角值;
UILabel引用.masksToBounds = YES;


根据UILabel中文字的内容,动态计算UILabel的高和宽
UILabel引用.font = [UIFont systemFontOfSize:10];  //设置UILabel字体大小
NSDictionary *attr = @{NSFontAttributeName: [UIFont systemFontOfSize:10]}; //10为字体大小
CGSize size = [@"字符串" boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options: NSStringDrawingUsesLineFragmentOrigin attributes:attr context:nil].size; //获取文字实际占位大小
CGFloat w = size.width;  //文字宽度
CGFloat h = size.height; //文字高度
UILabel引用.frame = CGRectMake(0, 0, w, h); //设置UILabel位置与宽高


UILabel自动换行
UILabel引用.numberOfLines = 0;


使用枚举定义字段
(1)定义枚举:
typedef enum {
    type1 = 0,
    type2 = 1
}Type
(2)在定义属性中使用:
@property(nonatomic, assign) Type type;  //枚举要使用assign修饰


获取屏幕宽度
CGFloat screenW = [UIScreen mainScreen].bounds.size.width;


创建NSString分类(类似子类)
New File -> iOS Source -> Objective-C File -> 输入File名称,FileType选择Category,Class选择NSString - > Next到完成创建,可以定义并实现自定义的方法,在使用NSString时可直接调用自定义的方法


比较2个值,返回大的值
CGFloat max = MAX(CGFloat类型的值1, CGFloat类型的值1);  //MAX是个宏


清空View的背景色
View引用.backgroundColor = [UIColor clearColor];


用平铺方式拉伸图片
UIImage *imgTar = [imgSrc stretchableImageWithLeftCapWidth:图片拉伸启始x的位置 topCapHeight:图片拉伸启始y的位置];  //开始xy的值为NSInteger类型,截取xy区的图片复制无数份进行平铺


设置UIButton内边距
UIButton引用.contentEdgeInsets = UIEdgeInsetsMake(left, top, right, bottom);


给UITextField(输入框)设置左边距
UIView *v = [[UIView alloc] init];
v.frame = CGRectMake(left, top, right, bottom);
UITextField引用.leftView = v;  //设置UITextField左边距的View
UITextField引用.leftViewMode = UITextFieldViewModeAlways;  //设置总是显示leftView


NSNotificationCenter(通知)的使用
(1)监听通知
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];  //获取通知管理对象
//name参数为nil时,监听方法会收到所有该通知对象的消息;object参数为nil时,所有名称为此name的通知都会触发监听;name和object参数都为nil时,所有消息都会触发监听
[nc addObserver:自定义监听对象引用 selector:@selector(自定义监听方法名) name:@"自定义通知名称" object:自定义通知对象引用];  //监听通知,其中自定义通知对象引用要与发送时为同个引用对象
监听方法定义示例(.h文件中):
- (void) 方法名:(NSNotification *) ni;  //可以没有参数,有参数为了接收并处理发送过来的消息
监听方法实现示例(.m文件中):
- (void) 方法名:(NSNotification *)ni{
   ni.name;  //通知名称
   ni.object;  //通知对象
   ni.userInfo;  //通知内容,是个字典
}
(2)发送通知
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];  //获取通知管理对象
[nc postNotificationName:@"自定义通知名称" object:自定义通知对象引用 userInfo:@{@"title": @"标题", @"content": @"内容"}];  //发送一个通知
(3)移除监听(dealloc在当前对象销毁时触发)
- (void)dealloc{
   [[NSNotificationCenter defaultCenter] removeObserver:self];  //必须移除,否则对象销毁后,还发送消息时会报错
}


键盘弹出回缩通知监听(键盘弹出时上推View,隐藏时下移View)
(1)监听键盘事件
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];  //获取通知管理对象
[nc addObserver:self selector:@selector(自定义监听方法名) name:UIKeyboardWillChangeFrameNotification object:nil]; //监听键弹出通知
(2)实现监听方法,平移View到键盘之上,在隐藏键盘时下移
- (void) 方法名:(NSNotification *) n{
   //获取键盘的y值
   CGRect rect = [n.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
   CGFloat keyY = rect.origin.y;
   CGFloat tranformY = keyY - view引用.frame.size.height;  //计算需要平移的值
   view引用.transform = CGAffineTransformMakeTranslation(0, tranformY);  //实现平移
}


修改键盘return键为"Send"
选中UITextField -> 点右上角属性按钮,修改Return Key值为"Send"


监听按下return键时的方法(监听UITextField)
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    NSString *text = textField.text; //获取输入框的内容
    return YES;
}


Toast实现(实际是普通View加入窗体中)
[[[UIApplication sharedApplication] keyWindow] addSubview:UILabel引用];  //UILabel中设置圆角效果,显示要toast的文字


KVC方式为对象属性赋值
User *user = [[User alloc] init];  //创建对象
[user setValue:@"名称" forKeyPath:@"name"];  //为User类的name属性赋值
[user setValuesForKeysWithDictionary:NSDictionary引用];  //User类的属性赋值, NSDictionary中的key名要和属性名相同
NSString *name = [user valueForKeyPath:@"name"];   //获取user中name属性的值


将对象转换为NSDictionary
NSDictionary *dict = [user dictionaryWithValuesForKeys:@[@"name"]];  //user中的属性名对应着key名,属性值对应着value


设置UILabel在不同屏幕分辨率下不同字体大小
选中View,最右上角属性图标中,点击Font前面的"+",选中对应屏幕类型,在新建字体中设置字体大小。


设置UIImageView在不同屏幕分辨率下显示不同图片
选中Images.xcassets,选中中间图片所在的item,在Width和Height中选择其他屏幕类别,然后将新图片拖到新增的空缺处。


当控件被挤压时控制优先级:
小尺子按钮,Content Hugging Priority和Content Compression Resistance Priority中设置优先级。


调试View的层次结构:
最下面,点击第7个书本图标

 

pch文件,此文件的内容能被项目中所有文件共享访问:

(1)直接新增定义会被OC与C文件导入

(2)使用_OBJC_,只供OC文件.m或.mm使用,例:

#ifdef  _OBJC_

#endif

 

横竖屏切换时触发:

/*
横竖屏切换时触发
*/
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

       if(UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){//判断是否为横屏

             //横屏宽度
             //MJDockLanscapeW;

        } else {

             //竖屏宽度

            //MJDockPortraitW;

         }

}

 

展开阅读全文

没有更多推荐了,返回首页