UIKit

时间:2023-03-10 03:33:27
UIKit

UIAlertView

  • UIAlertView
    • 调用创建好对象的[testObject show]的show方法即可弹出UIAlertView

UILabel

  • UILabel常见属性
    • text:显示文字
    • font:字体
    • textColor:文字颜色
    • textAlignment:文字对其方式
    • numberOfLines:文字行数
    • lineBreakMode:换行模式
  • UILabel属性面板
    • Lines:设置为0,就可以自动换行
    • Behavior:行为
      • enabled:可用的,否则不可用
      • Highlighted:高亮的
    • Line Breaks
      • Truncate~:当label显示不下内容时,省略内容的头部、中间、尾部
      • Character wrap:在内容为英文时,换行时直接换行
      • word wrap:内容为英文时,换行以单词结尾换行
      • Clip:显示不了的内容不会用省略号表示,直接裁剪掉
    • Shadow:阴影
    • Shadow Offset:阴影偏移量
      • Horizontal:水平方向,数值越大往右偏移
      • Vertical:竖直方向,数值越大往下偏移

UIImageView

  • UIImageView的对象属性
    • contentMode:设置显示模式
      • UIViewContentModeCenter:居中显示
  • UIImageView的初始化
//该方法没有设置frame,可以通过centre来设置位置,该方法存疑???有待验证
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]];

UIImage

  • UIImage的常见属性
    • image:显示的图片(设置图片时,PNG的格式不需要后缀)
    • animationImages:显示的动画图片
    • animationDuration:动画图片的持续时间
    • contentMode:设置图片的内容模式(即属性面板中View->Mode)
    • clipsToBounds:沿着边框裁剪,Bool类型,默认为No
      • 比如contentMode使用不带Scale属性的时候使用该方法
  • UIImage的方法
    • 动画类的方法
      • 通过UIImage设置动画即将一组动画添加到数组,再将这个数组赋值给UIImage的animationImage属性,接着通过设置animationRepeatCount设置播放次数,通过animationDuration设置播放时长
        • 30张图片的数组,设置为1秒,则是1秒三十帧❓ ???存疑
      • startAnimating:开始动画
      • stopAnimating:结束动画
    • imageNamed:通过图片名设置图片
    • imageWithContentOfFile:通过文件地址设置图片
    • resizableImageWithCapInsets:返回一个被保护的图片,通过UIEdgeInsetsMake()设置,一般情况下为以下设置:
      • top:设置为高度的一半
      • left:设置为宽度的一半
      • bottom:设置为高度的一半减1
      • right:设置为宽度的一半减1
    • resizableImageWithCapInsets-resizingMode:带有未保护显示方式参数,Tile为平铺,stretch为拉伸,常用的为Tile
    • strechableImageWithLeftCapInsets-topCapInsets:返回一个被保护的图片,但right和bottom的保护区域默认为left和top保护区域减1
/*
imageNamed:
1.就算指向它的指针被销毁,该资源也不会被从内存中干掉
2.放到Assets.xcassets的图片,默认就有缓存
3.图片经常使用时用gai该方法
imageWithContentsOfFile
1.指向它的指针被销毁,该资源会被从内存中刚掉
2.图片不经常使用,大批量的图片时使用该方法
*/
//其中[NSBundle mainBundle]可以获取app包的路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
testImageView.image = [UIImage imageWithContentsOfFile:path];
  • UIImage的属性面板
    • View->Mode:
      • 带有Scale有可能被压缩或被拉伸,不带的不会被拉伸和压缩
      • 带有
      • Scale to fill:带有比例的缩放并填充满控件,完全的压缩或拉伸
      • Scale Aspect fit:维持宽高比不变,进行压缩或拉伸
      • Scale Aspect fill:维持宽高比不变,fill填充整个控件
      • Redraw:重新绘图
      • Center:维持原图居中
      • Top:维持原图显示图片顶部
      • bottom:底部
      • left:左边
      • right:右边
      • 还有左上、左下、右上、右下

UIToolBar

  • UIToolBar
    • UIToolBar通常在键盘的上方或下方,作为工具栏
    • UIToolBar可以用来设置毛玻璃效果
//具体代码实现
#import "ViewController.h" @interface ViewController ()
@property (nonatomic,weak) UIImageView *imageView;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
UIImageView *testImageView = [[UIImageView alloc] init];
testImageView.frame = CGRectMake(, , , );
testImageView.image = [UIImage imageNamed:@"image"]; UIToolbar *toolBar = [[UIToolbar alloc] init];
toolBar.frame = testImageView.frame;
[testImageView addSubview:toolBar]; [self.view addSubview:testImageView]; }
@end

UIButton

  • UIButton

    • 既能显示图片,也能显示文字
    • 可以自定义随时调整内部图片和文件的位置
    • button的图片和文本设置一定要使用setImage和setTitle设置
  • UIButton的状态

    • normal:普通状态,按钮的默认状态,即default
    • highlighted:高亮状态,按钮被按下去并且未被松开时候的状态
    • disabled:失效状态,不可用状态,即enabled,为NO时,按钮不可以被点击
    • selected:布尔类型,是否选中的状态
      • e.g.音乐播放器的播放和暂停按键,选中状态即播放,未选中状态即暂停
  • UIButton的常见属性

    • buttonType:只读属性,必须在初始化button时使用,[UIButton buttonWithType:UIButtonTypeCustom]
    • frame:位置及尺寸
    • backgroundColor:背景颜色
    • titleLable:内容Lable,只读属性,获取到button内文字内容的对象
    • titleLable.shadowOffset:文字阴影偏移量
    • imageView.backgroundColor:图片内容的背景颜色
    • contentEdgeInsets:设置内容内边距,通过UIEdgeInsetMake()设置
    • imageEdgeInsets:设置图片的内边距
    • titleEdgeInsets:设置文本的内边距
  • UIButton的常见方法

    • buttonWithType:类工厂方法,通常选择UIButtonTypeCustom
    • setTitle-forState:对应状态设置对应文字
      • 如果仅设置了normal状态,所有状态都和normal一样
    • setTitleColor-forState:对应状态对应文字颜色
    • setTitleShadowColor-forState:对应状态对应文字阴影颜色
    • setImage-forState:对应状态对应图片
    • setBackgroundColor:设置背景颜色
    • setBackgroundImage-forState:对应状态对应背景图片
    • addTarget-action-forControlEvent:监听按钮的点击
      • addTarget:目标(让谁做事情,让viewController做事情,即使用self)
      • action:方法(做什么事情-->方法)书写方式如下:@selector(addGoodsClick)
      • Event:事件,比如TouchUpInside
  • UIButton的属性面板

    • Type:样式,类型
      • Custom:用户自定义button
      • Detail Disclosure:不能更改宽度和高度
      • Info Light:与DD同样,用来看info,详细信息的
      • Info Dark:与DD同样,属于偏平化后的历史遗留问题
      • Add contact:添加内容,比如通讯录添加
    • State config:即Button的状态
    • Shadow Color:阴影颜色
    • Shadow offset:只能设置正值,右走,下走
    • Image:内容图片
    • Background:背景图片
    • View -> Background:常用来设置背景颜色,也可以设置背景图片
    • Line Break:内容显示的方式,和UILable一yang样
    • Edge:内边距
      • content:包括图片和文字
      • 尽量只设置正数,负数Xcode会变成卡死状态
    • control -> Alignment:设置水平竖直格式
    • control -> content:查看各个状态的样式
      • Enabled:选中即可以点击,未选中即不能点击
      • Highlighted:查看高亮状态属性
    • view -> Mode:同UIImage的Mode,但很少用
  • UIButton的自定义

    • button内的子控件位置
      • titleRectForContentRect:更改UILable的位置
      • imageRectForContentRect:更改UIImageView的位置
    • layoutSubviews:必须继承[super layoutSubview],可以更改UILable和UIImageView的位置
    • initWithFrame:设置文本和图片的格式等
      • 使用代码创建按钮的时候会调用initWithFrame
    • 使用storyboard或者xib创建按钮的时候会调用initWithCoder
//使用代码创建按钮的时候会调用
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) { [self setupProperties]; }
return self;
} //使用storyboard或者xib创建按钮的时候会调用
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) { [self setupProperties]; }
return self;
} - (void)setupProperties{ //这里可以用来设置一些属性 }

UIScrollView

UIScrollView

  • UIScrollView的属性

    • delegate:设置代理,通常设置为控制器,self

    • contentSize:内容尺寸,即能够滚动的范围,必须设置,CGSize

    • userInteractionEnabled:是否能响应用户的交互,即拖拽点击类操作

      • 默认YES
      • 控件和子控件都不能跟用户交互
    • scrollEnabled:控件是否可以滚动,

      • 默认YES
      • 设置为NO,依旧可以进行点击监听
      • 可滚动尺寸为contentSize减去scrollView的尺寸
    • clipsToBuounds:超出控件边框自动裁剪,默认为YES

    • bounces:是否有弹簧效果,默认YES

    • alwaysBounceHorizontal:水平方向总是可以滚动

    • alwaysBounceVertical:竖直方向总是可以滚动

      • 下拉刷新效果可以使用
    • showHorizontalScrollIndicator:是否显示水平滚动条

    • showVertiaclScrollIndicator:是否显示竖直滚动条

    • contentOffset:设置/获取内容偏移量

      • 控制内容初始化显示的位置
      • 获取当前用户移动的偏移量
    • contentInset:设置内边距

      • 如音乐播放器显示歌词刚开始第一句歌词显示在中间可以用该属性设置
    • maximumZoomScale:最大缩放比例

    • minimumZoomScale:最小缩放比例

    • pagingEnabled:是否开启分页功能

      • 分页标准:以scrollView的尺寸为一页
    • subviews:子控件数组

      • makeObjectPerformSelector:让subviews数组的每一个成员执行某一个方法
        • 例如:@selector(removeFromSiperview)每个子控件执行从父控件中移除的这个方法
  • UIScrollView的方法

    • setContentOffset:设置contentOffset的值,即设置偏移量的数值
    • setContentOffset-animated:设置偏移量时是否带有动画效果,即从设置前的偏移量滚动到设置后的偏移量是否带有动画效果
  • UIScrollView的属性面板

    • view->show:设置控件的大小
    • view->backgroundColor:设置背景颜色
    • Scroll Indicators:是否展示滚动条
  • UIScrollView的注意点

    • UIScrollView具备滚动功能
    • 必须设置UIScrollView的contentSize
    • 不要通过索引subviews的数组来访问子控件
      • 若非要通过此方法访问子控件,设置水平竖直的滚动条禁用
    • 无法滚动
      • 未设置contentSize
      • scrollEnabled设置为了NO
      • userInteractionEnabled
    • 通过代码在viewDidLoad创建的UIScrollView刚开始subviews的数组为nil,显示完毕后才有两个imageView(即在viewDidAppear里)
    • scrollView在拖拽完毕后会因为惯性继续移动
    • 任何OC对象都能成为scrollView的代理

UIScrollView的代理

  • 设置代理:scrollview.delegate = self
  • scrollViewWillBeginDragging:即将开始拖拽时候条用的方法
  • scrollViewDidScroll:监听scrollView的滚动,scrollView会在滚动时候自动调用
  • scrollViewWillEndDragging:即将停止拖拽是自动调用的方法
  • scrollViewDidEndDragging-decelerate:停止拖拽后自动调用的方法,
    • 可以监听是否停止滚动,要结合DidEndDeceleration方法
    • decelerate == NO 说明用户停止拖拽scrollView,并停止滚动scrollView
    • decelerate == YES 说明用户停止拖拽scrollView,但因为惯性会继续滚动,减速
  • scrollViewDidEndDecelerating:惯性拖动停止后(即减速完毕后)自动调用的方法
    • 可以监听是否停止滚动
  • viewForZoomingInScrollView:返回需要缩放的子控件
    • 需要配合最大最小缩放比例属性使用
    • 用户使用捏合收拾时,scrollView是知道的,但是不知道要缩放哪个对象,所以需要用到代理
  • scrollViewDidZoom:缩放时自动调用的方法

UIPageControl

  • UIPageControl的常见属性
    • currentPage:当前页数
  • UIPageControl的属性面板
    • page:一共多少页
    • Tint Color:其他页的颜色
    • Current page:当前页的颜色
    • numberOfPages:page control的总页数
    • alpha:透明度
    • hidden:是否隐藏
    • hidesForSinglePage:单页是否隐藏

UISegmentedControl

  • UISegmentedControl的方法
    • addTarget:监听控件的点击
      • forControlEvents设置为值改变(UIControlEventValueChanged)

UITextField

  • UITexField的方法
    • addTarget:监听控件的点击
      • forControlEvents设置为值改变(UIControlEventEditingxxxx

UITextField的代理

  • textfield-range-string:当textfield文字改变的时候会调用这个方法,返回布尔值
    • 返回NO则不允许文字显示在textfield,YES则反之,控制文字的输入
    • string:改变的文字

UITableView

  • UITableView简介

    • UITablesView需要一个数据源(dataSource)来展示数据
    • UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等
    • UITableView每一行显示的都是一个UITableViewCell
    • 动态cell:显示的数据是由数据源动态控制的
  • UITableView面板属性

    • Table View->Style
      • 只读属性
      • UITableViewStylePlain:简单样式,即每组紧挨一起
      • UITableViewStyleGrouped:分组样式,即每组分开显示
    • Table View->Content:选择动静态
      • Dynamic Prototype:动态cell
      • Static Cells:静态cell
  • UITableView对象的常见属性

    • rowHeight:每一行的高度
      • 设置为UITableViewAutomaticDimension的时候,配合estimatedRowHeight可以通过添加约束来实现自适应高度的cell
    • estimatedRowHeight:设置估算高度
      • 任意大于0的值jie皆可
    • sectionHeaderHeight:每一组的头部高度
    • sectionFooterHeight:每一组的尾部高度
    • separatorColor:分隔线的颜色
    • separatorStyle:分隔线的风格
      • UITableCellSeparatorStyleSingleLine:单行线风格,默认模式
      • UITableCellSeparatorStyleSingleEtched:仅支持group样式
      • UITableCellSeparatorStyleNone:无风格,即没有分隔线
    • tableHeaderView:整张表的头部,可以传入任何继承UIView的控件
      • 例如广告展示,图片轮播器
    • tableFooterView:整张表的尾部,可以传入任何继承UIView的控件
      • 例如查看更多信息按钮
    • sectionIndexColor:设置索引条的文字颜色
    • sectionIndexBackgroundColor:索引条的背景颜色
  • UITableView对象的方法

    • cellForRowAtIndexPath:根据IndexPath获取对应的cell
      • 调用该方法时,该方法先要确定cell的宽度和高度,会调用heightForRowAtIndexPath
    • reloadData:刷新tableView
  • UITableView的类方法

    • dequeueReusabkeCellWithIdentifier:去缓存池中取是否有可循环利用的cell
/**********************Cell的复用********************/
//注意:有if既有else(除了cell==nil的if)
//所有cell都一样的设置写在大括号内 //方式一
//定义复用标识
static NSString *ID = @"testCell";
- (void)viewDidLoad {
[super viewDidLoad];
//根据复用标识注册对应类型的cell
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//从缓存池中取标识为ID的Cell,如果没有自动创建已注册的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//设置数据
cell.textLabel.text = @"testText";
return cell;
}
//方式二
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//1.定义复用标识
static NSString *ID = @"testCell";
//2.从缓存池中取标识为ID的Cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//3.如果缓存池中没有标识为ID的Cell,则创建cell
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
//4.设置数据
cell.textLabel.text = @"testText";
return cell;
}

UITableViewDelegate

  • 系统自动调用的方法
    • tableView-didSelectRowAtIndexPath:当某一行的cell被选中后调用该方法
      • indexPath:被选中的组和行数
    • tableView-didDeselectRowAtIndexPath:取消选中某一行后调用的方法
    • tableView-viewForHeaderInSection:设置各个组的头部控件
      • 返回头部控件后,设置的头部标题即失效
    • tableView-viewForFooterInSection:设置各个组的尾部控件
      • 返回尾部控件后,设置的尾部标题即失效
    • tableView-heightForHeaderInSection:设置各个组的头部高度
    • tableView-heightForFooterInSection:设置各个组的尾部高度
    • tableView-heightForRowAtIndexPath:设置各个行的高度

UITableViewDataSource

  • 凡是遵守UITableViewDataSource协议的OC对象都能成为tableView的数据源

  • 系统自动调用的方法(前三个按照系统调用顺序排列)

    • numberOfSectionsInTableView:定义一个tableView有多少组
    • tableView-numberOfRowsInSection❗️❗️❗️:必须要实现的方法
      • 告诉tableView中每一组有多少行,即多少个Row
      • 返回的值是每组Row的数量,
      • 有多少组,这个方法至少要被执行多少次
      • numberOfRowsInSection:在每一组中Rows的数量
    • tableView-cellForRowAtIndexPath❗️❗️❗️:必须要实现的方法
      • 告诉每一个Row即每一行显示的内容
      • tableView规定每行只能显示UITableViewCell或其子类,所以返回UITableViewCell类型
      • IndexPath:通过section和row属性可以确定是哪一行的cell
    • tableView-titleForHeaderInSection:设置每一组的组眉-头部标题
    • tableView-titleForFooterInSection:设置每一组的组脚-尾部标题
    • tableView-sectonIndexTitlesForTableView:设置索引条,返回一个数组
      • 索引条与tableView之间是根据数组的位置决定的

NSIndexPath

  • NSIndexPath的对象属性
    • section:tableView中哪一组
    • row:tableView中哪一行

UITableViewCell

  • UITableViewCell对象的常用属性

    • ImageView:图片子控件,默认显示在cell左侧
    • textLabel:文字Label子控件,默认显示在cell左侧,图片子控件右侧
    • detailTextLablel:详情文字子控件,默认显示在cell右侧,可调整位置,灰色字体
      • text:设置文字内容
      • textColor:设置文字颜色
    • accessoryType:即cell右侧的指示样式
      • UITableViewCellAccessoryCheckmark:勾的标识
      • UITableViewCellAccessoryDetailButton:详情按钮
      • UITableViewCellAccessoryDetailDisclosureButton:详情按钮+箭头指示标识
      • UITableViewCellAccessoryDisclosureIndicator:箭头指示标识
    • accessoryView:设置cell右侧的UIView子控件
      • 优先级大于accessoryType
      • 例如传入一个UISwitch,就会在右侧显示一个开关
    • selectionStyle:被选中时的样式
      • UITableViewCellSelectionStyleBule或Gray或Default:因为扁平化设计需要,iOS7开始都是灰色主题
      • UITableViewCellSelectionStyleNone:选中之后无背景色
    • backgroundColor:背景颜色
    • backgroundView:可以给cell背景传入任何继承自UIView的子控件
      • 例如传入一个UIImageView,用一张图片做背景
      • 优先级大于backgroundColor
    • selectedBackgroundView:被选中时的背景View
      • 当selectionStyle设置为None时,设置selectedBackgroundView没有效果
    • contentView:容器View
      • 方便操作内部控件
      • 宽度和cell一样,高度比cell低1
      • ImageView,textLabel,detailTextLablel三个都是contentView的子控件
      • 内部的子控件是懒加载
  • UITableViewCell的面板属性

    • Accessory:设置cell右侧的样式
      • Disciosure Indicator:cell右边有小箭头的样式
  • UITableViewCell的类方法

    • alloc:分配地址
      • initWithStyle-reuseIdentifier:以某一style创建一个cell,reuseIdentifier是指可复用的标识 UIKit
  • 自定义等高Cell

    • 1️⃣在initWithStyle中添加子控件,并对子控件进行一些初始化
    • 子控件添加到contentView中
    • 2️⃣在layoutSubviews设置所有子控件的位置和大写
    • layoutSubviews会先确定cell的宽度和高度,即先调用heightForRowAtIndexPath
    • layoutSubviews必须写[super layoutSubviews]
    • 3️⃣给外界提供一个模型数据,以传递数据
    • 重写模型数据的set方法,在set方法中将外界传来的数据设置到内部属性中
  • 自定义不等高cell

    • 给模型增加frame数据
      • 所有子控件的frame以及cell 的高度
    • 重写cellHeight属性的get方法
      • 进行判断,若cellHeight为0怎么进行计算;若不为0,直接返回cellheight
    • 在控制器中实现heightForRowAtIndexPath方法
      • 在方法中返回indexPath位置对应cell的高度
    • 给cell传递模型数据
    • 基本同等高cell
    • 使用AotuLayout给自定义添加约束,若想要让tableviewcell根据设定的约束自动计算高度,需要在viewDidLoad中设置下tableView的属性
//即self-sizing技术
//自动计算tableViewCell的高度
//告诉tableView所有cell的真是高度是自动计算的(根据设置的约束) self.storyTableView.rowHeight = UITableViewAutomaticDimension;
//设置tableViewCell的估算高度,50这个数值是估值,大于0即可
//当刚开始布局cell的时候如果没有估值tableView不知道该如何摆放cell
self.storyTableView.estimatedRowHeight = ;

UIColor

  • clearColor:清除颜色

UIFont

  • UIFont的类方法
    • systemFontOfSize:设置系统字体的大小

UIScreen

  • UIScreen的类方法
    • mianScreen:取到屏幕
      • bounds:主屏幕的bounds,还可以获取屏幕宽度高度等