基本控件
UIView
一般情况下我们会把它当做容器来用
常用属性-
backGroundColor //背景颜色
frame, bounds, center //位置 尺寸
tag //标识
alpha //透明度
clipsToBounds
contentMode //内容模式
userInteractionEnabled 默认是YES
常用的方法
viewWithTag:
-(void)removeFromSuperview;
-(void)insertSubview: atIndex:;
-(void)exchangeSubviewAtIndex: withSubviewAtIndex:(NSInteger)index2;
-(void)addSubview:(UIView *)view;
-(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
-(void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
-(void)bringSubviewToFront:(UIView *)view;
-(void)sendSubviewToBack:(UIView *)view;
UILabel
用来显示只读文本(不能编辑, 选中)
常用属性
text
textColor
font
textAlignment
numberOfLines
shadowOffse
常用方法
Color
UIButton
一个用来相应用户交互的视图
常用的属性
UIButton中很多的属性都是和状态绑定的, 如果脱离了状态直接在内部的控件上设置是没有效果的, E.G title, titleColor, BackGroundImagtate;
currentTitle, currentImage
常用方法
-(nullable NSString *)titleForState:(UIControlState)state;
-(nullable UIColor *)titleColorForState:(UIControlState)state;
-(CGRect)titleRectForContentRect:(CGRect)contentRect;
-(CGRect)imageRectForContentRect:(CGRect)contentRect;
父类方法: - addTarget:action:forControlEvents:
UIImageView
一个显示图片的视图
常用属性
image
highlightedImage
userInteractionEnabled 默认是NO(重写了父类的属性)
animationImages
animationDuration
animationRepeatCount
常用方法
-(void)startAnimating;
-(void)stopAnimating;
-(BOOL)isAnimating;
UITextField
一个用来显示/编辑单行文字的视图
常用属性
text
placeholder
leftView
leftViewMode
rightView
rightViewMode
attributedText
textAlignment
editing
inputView
inputAccessoryView
delegate
代理方法:
- // 当用户点击键盘上的回车键的时候就会调用这个代理方法
-(BOOL)textFieldShouldReturn:(UITextField *)textField
- // 结束编辑的时候调用
-(void)textFieldDidEndEditing:(UITextField *)textField
- // 开始编辑的时候调用
-(void)textFieldDidBeginEditing:(UITextField *)textField
- // 是否允许进入编辑状态
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
- // 询问String字符串是否应该替换在range的位置
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
UITextView
一个用来显示/编辑多行文字的视图
常用属性
text
textColor
font
textAlignment
inputView
inputAccessoryView
- 代理方法
- // 是否应该开始编辑
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
- // 是否应该结束编辑
-(BOOL)textViewShouldEndEditing:(UITextView *)textView
- // 已经开始编辑
-(void)textViewDidBeginEditing:(UITextView *)textView
- // 已经结束编辑
-(void)textViewDidEndEditing:(UITextView *)textView
- // 是否在指定的范围替换文本:text
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
- // 文本已经改变
-(void)textViewDidChange:(UITextView *)textView
- // 选中的范围已经改变
-(void)textViewDidChangeSelection:(UITextView *)textView
- // 是否在指定范围内相应URL的点击
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
- 键盘通知的Key
UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
UIScrollView
一个可以滚动的视图
常用属性
contentOffset : 内容的偏移
contentSize: 内容的尺寸
contentInset: 内容的内边距
showsHorizontalScrollIndicator: 显示水平的滚动条
showsVerticalScrollIndicator: 显示垂直的滚动条
directionalLockEnabled: 锁定某一个方向的滚动, 开始的方向是什么, 只要手指还在scrooView上拖动, 就一直是这个方向滑动
bounces: 是否有弹簧效果, 只要滑动到ContentView的边缘就没有再滑动的空间
alwaysBounceVertical: 是否一直有弹簧效果: 使用范围 ContentSize.height < ScrollView.height 的情况下垂直方向默认情况下是没有弹簧效果的, 但是设置了AlwaysBounceVertical = YES的时候就会让在这种情况下仍然有弹簧效果
alwaysBounceHorizontal
decelerationRate: 减速的速率
pagingEnabled: 分页
- 代理方法
- // 只要scrollView在滑动就会一直调用, 调用非常频繁
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
- // 将要开始滑动
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
- // 将要停止拖动的时候, 手指即将松开的时候调用 velocity: 这个时候的速度 targetContentOffset: 停止滚动的时候最终偏移量
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
- // 已经结束拖动
// decelerate: 告诉你是否要减速
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
- // scrollView已经滚动到最顶部
-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
- // 即将开始减速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
- // 已经完成减速
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
UITableView
一个用来展示和编辑层级列表信息的视图
常用属性
sectionHeaderHeight
sectionFooterHeight
rowHeight
separatorColor
separatorInset
separatorStyle
tableHeaderView
tableFooterView
- 数据源方法/代理方法
- // tableView中有几个Section
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- // 某个section中有几个cell
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- // 每个row显示的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- // 某个指定的Section的header的标题
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
- // 某个指定的Section的footer的标题
-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
- // 设置指定Section header上显示的view, 有了view之后, title就不起作用, 就是一个优先级的问题
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
- // 设置指定Section footer上显示的view
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
- // 设置行高
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- // Section中header的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
- // Section中footer的高度
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
- // 选中了某个cell(cell是显示的内容, 继承自UIView, row: 行号)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
传值
正向传值
A向B传值
属性传值
- 在A中创建一个B的实例对象, B要有一个写好的属性, 然后在A中给B的属性赋值
逆向传值
- B向A传值
Block
A中创建B的实例对象
在B中写一个Block属性
B中当事件触发的时候调用Block(判断Block属性是否有值)
A中设置Block属性, 也就是在创建B的地方写一个Block赋值给B的Block属性
注意点: Memory Cycle: 引用循环, 解决方法: __weak
__weak typeof(self) selfWeak = self;
如果Block里面访问的是成员变量, 在Block里面先用这个类型接收一下这个__weak指向的变量,再用这个新接收的类型来进行成员变量的访问
如果访问的是属性, 可以直接使用selfWeak.属性名 直接访问
Delagate
A中创建B的实例对象
在B中要先定义一个协议(协议的方法中第一个参数 一般情况下是 遵守协议的属性[delegate]所在的对象B)
在B中写一个遵守写好协议的对象, 就是delegate
在B中当事件触发的时候调用协议方法(需要判断这个代理是否实现这个协议方法)
在A中设置代理, 遵守协议, 实现协议中的方法
Notification
当B中的事件触发的时候, 发送(post)一个通知
在A中添加一个监听器A
当A销毁的时候, 移除监听器
控制器的展现方式
模态
一般是临时展示某一个控制器的视图
用法: 调用控制器的
-(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion // viewControllerToPresent:将要展示的控制器 completion:完成跳转之后要执行的Block代码块
-(void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion // flag: 消失的时候是否需要动画效果 completion: 执行小时动作完成之后要执行的Block代码块
UINavigationController
一般用来展示导航层级结构的内容的
用法
一个控制器要想使用push, 则必须被UINavigationController或者其子类管理
展示一个新的控制器:
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
-(nullable UIViewController *)popViewControllerAnimated:(BOOL)animated;
设置导航栏上的各种属性
设置导航栏上面的各种属性的时候推荐大家使用 Appearance的方式, 只要设置一次所有的UINavigationBar就会有同一种样式, 不用每一个都设置
调用UINavigationBar的appearance方法就会返回一个UINavigationBar对象, 在这个对象中就可以使用UINavigationBar里面所有标识为UI_APPEARANCE_SELECTOR的方法和属性.
UITabBarController
一个用来显示单选视图的控制器
用法:
方法一:
调用TabBarController的addChildViewController:方法添加一个控制器
方法二:
设置TabBarController的viewControllers属性, 就是把所有的控制器先创建好, 然后全部放在一个数组中, 最后把这个数组赋值给viewControllers这个属性
设置UITabBarItem
image
selectedImage
title
titlePositionAdjustment: 文字的偏移