说明:此系列只是本人在系统化夯实IOS基础时的一些记录。内容可能比较零散,也不是对某一点内容进行系统化的阐述。
添加、删除控件
[self.view addSubview:blueView];//self.view中添加blueView
[blueView removeFromSuperview];//从父控件中删除blueView
有时在有些需要中需要动态的增减控件
父控件可以通过tag值,获取子控件。
-(UIView *)viewWithTag:(NSInteger)tag;//此tag可返回自己,若有多个相同tag则返回找到的第一个
clickToBound = YES; //按边裁剪。超出父控件区域的子控件不显示。
延时操作的两种方法
1.[self performSelector:(SEL) withObject:()id afterDelay:(NSTimeInterval)];
2.dispatch_after
plist使用,用来存储NSArray 、NSDictionary
加载plist数据:
NSString *file = [[NSBundle mainBundle]pathForResources:@"shops" ofType:@"plist"];
[NSArray arrayWithContensOfFile:file];
Xcode一些知识点
xcode中黄色文件夹都是虚拟的(group),而蓝色文件夹是确实存在的
从其他项目拷贝的文件有时提示找不到文件,应该查看:Build Phase ->Copy Bundle Resources,哪些文件已经加入到Bundle中
- <# #> 可用于代码块的设置
如:
@property (nonatomic,strong) <#type#> *<#name#>;
用initWith初始化时返回的是instancetype类型,而不是id
- instancetype在类型上与id一样 ,可以表示任何对象类型。只能用在返回值类型上,不能像id一样用在参数类型上。
- instancetype会被编译器检查真实类型。
- 返回id,那么其可以转化的任意类,容易出错。
如: 返回的对象是UILabel,但是返回的是id。因此可使用
id label = [[UILable alloc]initWithFrame:frame];
NSString *test = (NSString *)label;
NSLog(@"%@",test.length);//只有在执行的时候才会出错
UIView封装注意点
init中初始化各个子控件,但无需设置各个子控件的frame。而是在layoutSubviews中设置子控件的frame。
layoutSubviews 。布局子控件,一般在这里设置子控件的frame,当控件本身尺寸发生改变时,系统或自动调用这个方法。可用来监听控件尺寸改变。一般重写initWithFrame方法,不直接重写init方法,因为init方法内部会调用initWithFrame方法。
如果一个view内部子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心。外界可以传入对应模型数据给view,view拿到数据后给子控件设置相应数据。
传入模型
-(void)setModel:(SDHModel)model {
_model = model;
//设置各个控件title
}
加载xib文件
1.NSArray *objs = [[NSBundle mainBundle]loadNibName:@"Test" owner:nil options:nil];
一个UINib对象代表一个xib文件
2.UINib *nib = [UINib nibWithNibName:@"Test" bundle:[NSBundle mainBundle]];//一般情况下参数:bundle为nil,则默认为mainBundle
NSArray *objs = [nib instanctiateWithOwner:nil options:nil];
UIScrollview
1.contentsize属性:scrollview的内容大小,滚动范围。内容偏移量,当前显示的内容的顶点相对此控件顶点的x、y距离,默认为CGPointZero
如果想禁止某个方向的滚动,那么就直接设置width或者height = 02.contentOffset属性:表示UIScrollView滚动位置(即内容左上角与scrollview左上角的间距值)
scrollView.contentOffset = CGPointMake(a,b);
- 3.contentInset属性:这个属性在UIDcrollview的四周增加额外滑动区域
UIScrollView代理:监听整个滚动过程
一般监听可以使用addTarget、delegate、KVO。可以优先考虑addTarget。
- [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];//让子控件都执行删除方法(或其他方法)
动画
1.[UIView animateWithDuration:2.0 animations:^{ … }];
2.[UIView beginAnimations:nil context:nil];
[UIView commitAnimations];
区分initWithFrame、initWithCode、awakeFromNib
- UIView用xib描述,若直接使用[[UIView alloc]init]方法系统不回去加载同名的xib,必须使用loadNibName。而控制器不同。[UIViewController alloc]init 会自动加载同名的xib文件。
- 通过xib加载资源时,系统是调用的[[UIView alloc]initWithCode:coder]而不是initWithFrame ,其中coder是xib解释器。也会调用awakeFromNib,控件从xib、storyboard中创建完毕后调用此方法。若想对控件创建完毕后的初始化操作应该执行awakeFromNib。
监听控制器(viewController)view点击
-(void)touchBegan:(NSSet)touches withEvent:(UIEvent *)event;