如何修改控件状态
如何修改控件的状态呢?方法很简单:
每一个UI控件都是一个对象
修改UI控件的状态,其实就是修改控件对象的属性
比如修改UILabel显示的文字,就修改UILabel对象的text属性即可
比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可
不难想到,每一个UI控件肯定都有很多属性,比如:
UIProgressView进度条控件有progress属性(进度值)
UILabel和UITextField都有text属性(显示文字)
……
虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,比如每一个UI控件都有自己的位置和尺寸、都有自己的父控件、子控件。于是,所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中,比如:
frame :位置和尺寸
center :中心点位置
……
UIView的常见属性
@property(nonatomic,readonly) UIView *superview;
获得自己的父控件对象
@property(nonatomic,readonly,copy) NSArray *subviews;
获得自己的所有子控件对象
@property(nonatomic) NSInteger tag;
控件的ID(标识),父控件可以通过tag来找到对应的子控件
@property(nonatomic) CGAffineTransform
transform;
控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
@property(nonatomic) CGRect frame;
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
可以定义控件的位置(origin)和大小(size)
@property(nonatomic) CGRect bounds;
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
注意:如果没有设置位置的情况下,把自己的左上角放在控制器的中心点
可以定义控件的大小W H(size)
@property(nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)
可以定义控件的位置X Y(center)
未命名图片4.pngUIView的常见方法
-
(void)addSubview:(UIView *)view;
添加一个子控件view -
(void)removeFromSuperview;
从父控件中移除 -
(UIView *)viewWithTag:(NSInteger)tag;
根据一个tag标识找出对应的控件(一般都是子控件)
常用的Xcode插件
Xcode插件大全
http://www.cocoachina.com/industry/20130918/7022.html
必备
文档注释生成:https://github.com/onevcat/VVDocumenter-Xcode
自动检索图片名:https://github.com/ksuther/KSImageNamed-Xcode
插件管理工具:https://github.com/mneorr/Alcatraz
移除插件(可以使用上面提到的插件管理工具Alcatraz)
到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夹中删除
插件失效修复:http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/
未命名图片3.png********************笔记**********************
1.监听:监视我们的肢体按下(点击)哪个按钮(可以被点击的东西)事件(系统调用的是那个方法)
2.storyboard: 描述软件界面的, 目前理解: 应用程序一启动就会加载这个文件
3.文字 是使用UILabel 按钮使用 UIButton 创建对象
4.控制器 : 控制器就是继承自UIViewController控制器就是管理"当前的软件界面"的所有事件(点击,拖拽)
5.IBAction 返回值相当于void 能让storyboard中的控件跟(方法)代码进行连线
- 连线:
why:当按钮需要"控制器"处理某些事件的时候,那么这个处理就应该交给控制器的方法来做
what:只有在方法返回类型是IBAction的情况下,才能连线
how:首先 方法的返回值必须是IBAction 按xcode上右上角的双环按钮,直接脱线
- 常见错误
reason:'[<ViewController 0x7fc07ae36380> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'
这个情况一般是: 属性(label)之间连线,属性不存在,但是线还在
其他情况kvc:
reason:'-[ViewController blueClick]: unrecognized selector sent to instance 0x7ffd63828e90'
找不到按钮的方法(不可识别的方法)(blueClick)
-
拷贝的时候会直接把线也一起copy(注意点)
-
分类和类扩展
类扩展:可以扩展属性,成员变量,方法,一般情况下属性都是放在类扩展内,苹果官方也是这么建议的(没必要让外界知道封装性)
分类:只能扩展方法 -
storyboard 应用程序已启动就会加载main.storyboard
, 创建箭头指向的控制器,初始化控制器内部的所有UI(UI进阶会讲app的启动原理)
注意点:类型不匹配不能连线
11.superview: 获取当前的控件的父控件 (获取到调用者(谁调用的谁就是调用者)父控件) self.btn.superview self.btn 就是调用者
12.subviews :获取当前控件的所有子控件, 返回一个装满控件的数组获取调用者的所有子空间
self.purpleView.subviews
self.purpleView 就是调用者
13.addSubView: 添加一个子控件,添加到调用者身上(谁调用这个方法那么谁就是调用者)
14.removeFromSuperview:从父控件把当前(调用者)控件移除
[xiaojian removeFromSuperview]
[liuqi addSubView:xiaojian]
15.viewWithTag: 根据调用内部子空间的tag找出对应的子控件
1. 直接子控件
2. 按顺序找子空间内部的所有自控,然后找后面自控件的所有子控件
16.frame 既能设置尺寸也能设置位置
设置控件在父控件中的尺寸和位置
17.bounds 只能设置尺寸
设置控件在父控件中的尺寸
如果没有位置的话,那么使用自己的中心放在左上角
18.center 只能设置位置
设置控件的中心点在父控件中的位置
- OC 不允许直接修改对象的 结构体的 成员的 属性
解决的方案 command + ]
来一个临时的frame 存储对象的frame
CGRect tempFrame = self.myBtn.frame;
直接改变临时的frame
tempFrame.origin.y -= 10;
赋值给对象的frame
self.myBtn.frame = tempFrame;
- UILabel
- text 设置label的文字
- textcolor 设置label的文字颜色
- textAlignment 对齐方式
- numberOfLines 换行个数 0 "自动换行"
- linesBreakMode 缩进方式 ...abc abc... a..bc
-
font 字体大小和样式 (系统默认样式, 斜体样式,粗体样式)
font 系统默认样式 斜体 粗体
系统样式
label.font = [UIFont systemFontOfSize:19.0f];
粗体
label.font = [UIFont boldSystemFontOfSize:24.0f];
斜体
label.font = [UIFont italicSystemFontOfSize:24.0f]; -
imageView
contentMode
拉伸至填充整个UIImageView
UIViewContentModeScaleToFill,
等比例拉伸 至自适应
UIViewContentModeScaleAspectFit,
等比例拉伸 至填充
UIViewContentModeScaleAspectFill,
不拉伸 不缩放 显示位置
UIViewContentModeCenter,
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
-
缓存
UIImage*img = [UIImage imageNamed:iconName];
通过这种方式一定有缓存
使用imageWithContentsOfFile 没有缓存 用完就干掉
用完了 必须替换图片
- bundle
就是一个文件
mainbundle 资源文件夹 里面装的是所有资源文件
5.images.xcassets 可以更改图片的属性 不能获取全路径(因为它是一个压缩包)
不考虑缓存
经常使用的
直接放在项目里 可以获取全路径 但是不能改图片的属性
考虑缓存
不经常使用
- UIButton
- 不能直接给按钮的titleLabel/ imageView赋值
因为这样赋值按钮不知道 你需要是给它的那个状态下的属性赋值
2. [btn addTarget:self action:@selector(click:)
forControlEvents:UIControlEventTouchUpInside];
当触发了UIControlEventTouchUpInside
事件之后 调用 控制器(self) 的
click方法
-
任何继承自UIControl的类都可以使用addTarget方法
[sender isKindOfClass:[UIButton class]]
判断sender的类型是否匹配
- 按钮模糊(蒙版)的效果是因为按钮是system
- self.purpleView.subviews 0.1.2.3.4.5.6(addSubview的情况下)
- index%3 = cos
index/3 = row
- 思路:
- 搭建软件界面
- 监听按钮的点击, 点击添加往紫色view中添加一个控件
- 设置位置
1. 获取下标
2. 根据下标计算cos row
3. cos 决定x row 决定是y
4. 添加一个黑色view,而这个view中包含两个自控件(图片,名称)
5. x, y 只决定view (不决定里面的子空间,子控件位置相对黑色的view)
黑色的子控件建议: x都是0 ,图片的y 也0 名称的y 等于
图片的高
6. 设置数据
采取的懒加载, 用到的时候再加载
1. 创建两个数组
2. 创建一个装满字典的数组
颜色 一般情况 是用来调试的
网友评论