• 问题总会出现,不过解决问题的方法也会出现!!!

UI控件01-基础控件01

UI控件 小雨 546次浏览 已收录 0个评论


IBAction和IBOutlet究竟有什么作用?

IBAction

从返回值角度上看,作用相当于void
只有返回值声明为IBAction的方法,才能跟storyboard中的控件进行连线

IBOutlet

只有声明为IBOutlet的属性,才能跟storyboard中的控件进行连线
如果遇到无法正向连线 即无法从storyboard中连线到.m文件中,可以尝试反向连线,即现在.m文件中创建好对应的方法或者属性,从.m文件拖线到storyboard中的控件

控件中使用 weak 和 strong来修饰属性都是可以使用的

如果在. m 文件里把关联过线的方法给删除掉, 那么一定要在 storyboard 里把联线给删除掉,否者会报错

如何退出键盘?

(1).resignFirstResponder

当叫出键盘的那个控件(第一响应者)调用这个方法时,就能退出键盘

(2).endEditing

只要调用这个方法的控件内部存在第一响应者,就能退出键盘

如何搭建UI界面?

在iOS5之前,苹果使用xib文件来描述UI界面
在iOS5之后,苹果采取了更加强大和先进的storyboard文件来描述界面(Xcode5是基于iOS7的)
修改项目中的Main.storyboard文件就可以修改UI界面

程序怎么找到storyboard?

是通过配置文件进行设置的 info.plist

模拟器无法调出键盘该怎么办?

iOS 8模拟器键盘不支持中文输出,只能使用粘贴、复制。
在iOS 8的模拟器下无法调出键盘时,使用command + K键调出键盘,或者 shift comand k。

常用的UI控件

为了便于开发者打造各式各样的优秀app,UIKit框架提供了非常多功能强大又易用的UI控件
下面列举一些在开发中可能用得上的UI控件(红色表明最常用,蓝色代表一般,黑色代表几乎不用)UI控件01-基础控件01

 

UILabel – 文本标签文本标签的作用仅仅是显示一串固定的文字
UIButton – 按钮 按钮的作用是:
监听用户的点击事件,在用户点击后做出反应
同时显示图片和文字
按钮的特性:按钮是分状态的,可以显示不同状态下的文字和图片

UITextField – 文本输入框 文本输入框可以弹出键盘,让用户输入一些具体的值
UITextView – 能滚动的文字显示控件如果文字内容比较多,需要换行显示,并且需要编辑,就用它

UIAlertView – 对话框(中间弹框,iOS8已过时)从中间弹出一个框提示用户下一步该干啥
UIActionSheet – 底部弹框(iOS8已经过时)从底部弹出一个框提示用户下一步该干啥
UIScrollView – 滚动的控件 如果内容比较多,超出了一个屏幕,就可以用它来显示
UIPageControl – 分页控件 能显示当前的页码
UITableView – 表格 如果每一行显示的内容格式差不多,就用这个表格控件
UICollectionView – 九宫格 如果显示的东西是一块一块、一格一格的,而且每个格子长的差不多,就可以用它
UIProgressView进度条控件 可以用来显示加载进度
UIWebView – 网页显示控件 一般用来显示网页,使用它,就可以在手机上浏览网页
UISwitch – 开关要么打开,要么关上
UISegmentControl – 选项卡 在固定的几个选项之间进行选择
UIPickerView – 选择器 在多行数据之间只选择一行
UIDatePicker – 日期选择器 选择日期
UIToolbar – 工具条 一般显示在底部或者键盘顶部,里面有几个小按钮
UINavigationBar – 导航条 显示在顶部的条

如何修改控件状态?

每一个UI控件都是一个对象,修改UI控件的状态,其实就是修改控件对象的属性

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;
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
@property(nonatomic) CGRect bounds;
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的xy一般为0)
@property(nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)

UIKit坐标系

在UIKit中,坐标系的原点(0,0)在左上角,x值向右正向延伸,y值向下正向延伸UI控件01-基础控件01

 

UIView的常见方法

- (void)addSubview:(UIView *)view;
添加一个子控件view
- (void)removeFromSuperview;
从父控件中移除
- (UIView *)viewWithTag:(NSInteger)tag;
根据一个tag标识找出对应的控件(一般都是子控件)

添加图片资源

从Xcode5开始,图片资源都放到Images.xcassets中进行管理,后来改名Assets.xcassets

autolayout自动布局

storyboard里面的autolayout功能,是自iOS6开始出现的特性
它是用来自动布局的,用来束缚控件的位置和尺寸。去掉这个功能,控件的位置和尺寸就不再有一些固定的束缚。

修改头像按钮的位置

通过修改控件的frame属性就可以修改控件在屏幕上的位置和尺寸
比如点击“向上”按钮,让按钮的y值减小即可

- (IBAction)top:(UIButton *)sender {
CGRect btnFrame = self.headBtn.frame;
btnFrame.origin.y -= 10;
self.headBtn.frame = btnFrame;
}

下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员

self.headBtn.frame.origin.y -= 10;//错误

简易动画大致有2种方式:

头尾式

[UIView beginAnimations:nil context:nil];
/** 需要执行动画的代码 **/
[UIView commitAnimations];

Block式

[UIView animateWithDuration:0.5 animations:^{
/** 需要执行动画的代码 **/
}];

修改控件的位置和尺寸

通过以下属性可以修改控件的位置

frame.origin
center

通过以下属性可以修改控件的尺寸

frame.size
bounds.size

transform属性

利用transform属性可以修改控件的位移(位置)、缩放、旋转

创建一个transform属性

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle);//(angle是弧度制,并不是角度制)

在某个transform的基础上进行叠加

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

清空之前设置的transform属性

view.transform = CGAffineTransformIdentity;

UIColor常见类型

一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色

+ (UIColor *)blackColor; // 0.0 white 黑色
+ (UIColor *)darkGrayColor; // 0.333 white 深灰色
+ (UIColor *)lightGrayColor; // 0.667 white 亮灰色
+ (UIColor *)whiteColor; // 1.0 white 白色
+ (UIColor *)grayColor; // 0.5 white 灰色
+ (UIColor *)redColor; // 1.0, 0.0, 0.0 RGB 红色
+ (UIColor *)greenColor; // 0.0, 1.0, 0.0 RGB 绿色
+ (UIColor *)blueColor; // 0.0, 0.0, 1.0 RGB 蓝色
+ (UIColor *)cyanColor; // 0.0, 1.0, 1.0 RGB 青色
+ (UIColor *)yellowColor; // 1.0, 1.0, 0.0 RGB 黄色
+ (UIColor *)magentaColor; // 1.0, 0.0, 1.0 RGB 品红
+ (UIColor *)orangeColor; // 1.0, 0.5, 0.0 RGB 橙色
+ (UIColor *)purpleColor; // 0.5, 0.0, 0.5 RGB 紫色
+ (UIColor *)brownColor; // 0.6, 0.4, 0.2 RGB 棕色
+ (UIColor *)clearColor; // 0.0 white, 0.0 alpha 清除颜色(空色)

一个UIImage对象代表一张图片,一般通过imageNamed:方法就可以通过文件名加载项目中的图片
(文件名可以省略扩展名)

UIImage *image = [UIImage imageNamed:@"btn_01"];

按钮的样式

实际上,UIButton自带了很多种不同的样式UI控件01-基础控件01

 

在用代码创建按钮的同时指定按钮样式

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonTypeCustom:无类型,按钮的内容需要自定义

UI控件01-基础控件01

设置按钮的背景图片

按钮是有多种状态的:
normal(普通状态):默认情况, UIControlStateNormal
highlighted(高亮状态):按钮被按下去的时候(手指还未松开), UIControlStateHighlighted
设置按钮在不同状态下的背景图片(为了保证高亮的图片正常显示,必须设置按钮的type为custom)

什么是 UI?

user interface : 用户接口
打开一个 app 能看到的都属于 UI 的范畴
UIKit框架能显示的对象都是继承自 UIView
UI 只是用来显示界面的, 别的事情做不了

image 和 background image 区别

在设置 image 的时候, 会根据图片的大小进行显示
background image 是按照按钮的大小进行显示的
如果只需要设置一张图片的时候, 最好使用 background image
如果同时设置 image 和 background image , 只会显示 image , image 把 backgroundImage 给覆盖掉了

如果和 title 一块进行设置的时候:
image : 左侧显示 image 右侧 显示 title
background image : title 显示在 button 的 正中央

button 的 background color 是不需要分状态的

frame与bounds和center的坐标参照依据

frame : 是以父view 的左上角为坐标原点
bounds : 是以自己的左上角为坐标原点(x = 0, y = 0)
center : 是以父 view 的左上角为坐标原点

如何修改对象frame?

在修改对象 frame 的时候:
对象的结构体成员变量 不能直接修改: 因为没有提供 set 方法
正确方法:
如:修改 Y 值的时候:
1. 取出对象的 frame
2. 修改临时的 frame 中 Y 值
3. 把修改过的临时 frame 赋值给 Button

复制使用storyboard注意事项

在 storyboard 通过复制 粘贴 进行控件的增加要注意:
复制的时候, button 的一切设置 都会 拷贝一份到新控件上
关联的方法也会被复制

UIView子控件的tag属性

tag : 所有继承 UIView 的子类都有这个属性
只能设置整数
如果不设置, 默认都为0

UIView 中常用的属性

一个 view 可以有多个 子 view 但 只有一个父 view

1. tag
可以给控件设置 tag 值, 通过 viewWithTag: 这个方法取出对象

UILabel *label = (UILabel *)[self.view viewWithTag:10];

2. subviews
返回的是: 一个view 中所有的子 view, 返回的是一个数组类型

3. superview
返回的是一个控件的父 view

4. removeFromSuperview
removeFromSuperview 从父 view 中移除控件
只能让将要被移除的控件自己去调用

5. addSubview
这个方法, 只能充当 父 view 的对象才可以调用

代码添加按钮:

1. 实例化 button

init : 是所有对象的实例化方法
initWithFrame: 是所有 UIview 类型的实例化方法

UIButton *imageButton = [[UIButton alloc] initWithFrame: CGRectMake(100, 100, 150, 150)];

2. 设置 button 的属性

一定要分状态进行设置

// 设置普通状态下的背景图片
[imageButton setBackgroundImage:image forState:UIControlStateNormal];

// 设置高亮状态下的背景图片
[imageButton setBackgroundImage:highImage forState:UIControlStateHighlighted];

// 设置文本 普通状态下的 title
[imageButton setTitle:@"普通状态" forState: UIControlStateNormal];

// 修改普通状态下的 文本 颜色
[imageButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
// 添加按钮的点击方法
点击 imageButton 的时候, 就会调用控制器的 didClickButton: 方法

[imageButton addTarget:self // 控制器
action:@selector(didClickButton:) // 调用的方法
forControlEvents:UIControlEventTouchUpInside]; // 触发的事件

Bundle Identifire是什么?

Bundle Identifire:唯一标示app,如果两个应用标示是一样的,那么,后安装的会默认覆盖掉前面安装的应用

如何设置storyboard的启动入口?

如果要启动程序就进入自己创建的storyboard就必须勾选is Initial View Controller,之后控制器的左侧就会出现小箭头UI控件01-基础控件01

 

Xcode编辑器快速打开左右栏

UI控件01-基础控件01


本博客内容既有转载自网络的内容,也有本作者原创内容,仅供学习与交流之用
如有侵权或者错误之处,请及时在下方留言!
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址