UIControl :控制类->触摸一个视图 执行某个任务
点击某个视图 触发一个事件
UIControl :是一个带有触发事件的视图
主要内容:
0.UIControl的子类
1.UIControl
2.**响应事件
3.封装
4.按钮 UIButton
#pragma ----UIControl的子类-----
UIControl他的子类
UISwitch 开关
UISegmentedControl 分段选择控件
UISlider 滑杆儿
UITextField 文本输入控件
UIPageControl 页面控制、翻页(点点)
这些视图 都可以点击触发事件
UIButton 按钮
UIButton:是一个按钮——>系统封装好的UIControl 里面可以放文字、图片以及设置文字图片相关的内容 同时也可以触发事件
1、button 的初始化 有一个类方法
+ (instancetype)buttonWithType:(UIButtonType)buttonType;
//定制
UIButtonTypeCustom = 0,
UIButtonTypeSystem //系统默认的样式
UIButtonTypeDetailDisclosure,//显示详细信息的样式
UIButtonTypeInfoLight,//高亮
UIButtonTypeInfoDark,//灰暗
UIButtonTypeContactAdd,//+
UIButtonTypeRoundedRect = UIButtonTypeSystem,
状态:
UIControlStateNormal//普通状态
UIControlStateHighlighted//高亮状态 isHighlighted
UIControlStateDisabled//未选中 取消选中状态
UIControlStateSelected//选中的状态 需要设置button.selected = YES;选中状态
#pragma ----UIControl常用属性------
1、enabled :启用 激活 用来设置视图是否可以使用触发事件 默认值是YES,设置成NO就会禁用这个视图的触发事件。
2、selected:选中(状态,eg:播放器暂停键)是不是选中了这个控件 默认值是NO
3、highlighted:是不是高亮的状态 默认值是NO
#pragma ----响应事件------
UIControl独有的重要方法:
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
1.Target:目标->让谁去调用一个方法
2.action:行动->让这个目标去做什么事
3.SEL:运行时->@selecter()->选择者(方法选择器)
4.controlEvents:控制事件->执行行动的方式
UIControlEventTouchDown *****
单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
UIControlEventTouchDownRepeat
多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
UIControlEventTouchDragInside *****
当一次触摸在控件窗口内拖动时。
UIControlEventTouchDragOutside
当一次触摸在控件窗口之外拖动时。
UIControlEventTouchDragEnter
当一次触摸从控件窗口之外拖动到内部时。
UIControlEventTouchDragExit
当一次触摸从控件窗口内部拖动到外部时。
UIControlEventTouchUpInside *****
所有在控件之内触摸抬起事件。
UIControlEventTouchUpOutside
所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
UIControlEventTouchCancel ***
所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventTouchChanged*****
当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
UIControlEventEditingDidBegin *****
当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged *****
当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd *****
当文本控件中编辑结束时发送通知。
UIControlEventEditingDidOnExit *****
当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAlltouchEvents
通知所有触摸事件。
UIControlEventAllEditingEvents
通知所有关于文本编辑的事件。
UIControlEventAllEvents
通知所有事件。
#pragma ----封装----
封装:
封装按钮 1、有提示文字 2、并且可以点击
有文字 ->UILabel
可以点击 ->UIControl
#pragma -------------------
放置控件至最中间位置
//(屏幕的宽-控件的宽)/2 = x
屏幕的宽:CGRectGetWidth([UIScreen mainScreen].bounds)
//给control添加一个响应事件->按下
//让目标(self)去选择一个方法(login)去执行
[control addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
control.backgroundColor = [UIColor cyanColor];
[self.window addSubview:control];
F_Button *Button = [[F_Button alloc]initWithFrame:CGRectMake(0,100, 100, 40) title:@"登录"];
Button.backgroundColor = [UIColor redColor];
[Button addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
[self.window addSubview:Button];
//如果控制类的视图 调用这个方法 会把当前的控制类对象传到这个方法里面
//公式:- (void)方法名:(类名*)参数名
- (void)login:(UIControl *)sender{
NSLog(@"%@",sender);
// NSLog(@"登陆成功");
sender.backgroundColor = [UIColor cyanColor];
[self showAlertViewWithMessage:@"登陆成功"];
}
//封装 弹出框 -> UILabel
//3秒后消失 -> 定时器 NSTimer
- (void)showAlertViewWithMessage:(NSString*)message{
UILabel *label = [[UILabelalloc]initWithFrame:CGRectMake(0, 0, 200, 40)];
label.backgroundColor = [UIColor orangeColor];
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.adjustsFontSizeToFitWidth = YES;
label.text = message;
label.tag = 100;
//设置弹出框在窗口中心
label.center = self.window.center;
[self.window addSubview:label];
[self performSelector:@selector(removeAlertView)withObject:nil afterDelay:3];
}
- (void)removeAlertView{
UILabel *label = [self.window viewWithTag:100];
[label removeFromSuperview];
}
// const:修饰符 表示 当前内容不允许改变
// 给control 添加一个响应事件->按下
// 让目标(self)去选择一个方法(login)去执行
[control addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
control.backgroundColor = [UIColor brownColor];
[self.window addSubview:control];
FButton *button = [[FButton alloc] initWithFrame:CGRectMake(0, 100, 100, 40) title:@"登录"];
button.backgroundColor = [UIColor orangeColor];
button.tag=101;
[button addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
[self.window addSubview:button];
// button.enabled =NO;
UIImage *playImage=[UIImageimageNamed:@"play"];
UIImage *pauseImage =[UIImageimageNamed:@"234.jpg"];
UIButton *button1=[UIButton buttonWithType: UIButtonTypeCustom ];
button1.frame=CGRectMake(200, 40,100, 30);
button1.frame=CGRectMake(200, 40, playImage.size.width, playImage.size.height);
//普通状态下的标题
[button1 setTitle:@"登录" forState: UIControlStateNormal ];
// //button1.titlelabel:button上面的label
// //选中状态的标题
[button1 setTitle:@"正在登录" forState: UIControlStateSelected];
[button1 addTarget:self action:@selector(loginTo:) forControlEvents:UIControlEventTouchUpInside ];
//给按钮设置背景图片
[button1 setImage:pauseImage forState:UIControlStateHighlighted ];
//当点击的时候 有高亮
button1.showsTouchWhenHighlighted=YES;
//设置按钮的背景图 可以同时显示上面的标题
button1.selected=YES;
//设置标题的字体颜色
- (void)setTitleShadowColor:(nullable UIColor *)color forState:(UIControlState)state
//设置阴影颜色
[button1 setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
// button1.backgroundColor=[UIColor blueColor];
[self.window addSubview:button1];
//通过按钮的状态 找到按钮这个状态图片
UIImage *getImage=[button1 imageForState:UIControlStateNormal ];
UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(200, 200, 100, 100)];
imageView.image=getImage;
[self.window addSubview:imageView];
// titleForState:获得按钮某个状态的标题
// titleColorForState:获得按钮某个状态的文字颜色
//titleShadowColorForState:获得按钮某个状态的标题阴影颜色
// imageForState:通过按钮的状态 找到按钮这个状态的图片
// backgroundImageForState:获得按钮某个状态的背景图片
-(void)loginTo:(UIButton *)sender
{//通过设置selected
sender.selected =sender.selected!=YES ? YES:NO;
}
//(屏幕的宽-控件的宽)/2 = x
UIControl *control = [[UIControlalloc]initWithFrame:CGRectMake((SCREEN_WIDTH-100)/2,SCREEN_HIGHT-200, 100, 200)];
// control.center = self.window.center;
//给control添加一个响应事件->按下
//让目标(self)去选择一个方法(login)去执行
[control addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
#pragma -----------------------------
//如果控制类的视图 调用这个方法 会把当前的控制类对象传到这个方法里面
//公式:- (void)方法名:(类名 *)参数名
- (void)login:(UIControl *)sender{
//如果没有选中
if (sender.selected!=YES) {
sender.backgroundColor = [UIColor cyanColor];
//更新选中状态
sender.selected=YES;
}else{
sender.backgroundColor=[UIColor orangeColor];
sender.selected=NO;
}
// NSLog(@"%@",sender);
//
// NSLog(@"%d",sender.selected);
// NSLog(@"登录成功");
[self showAlertViewWithMessage:@"密码错误"];
}
//1、 封装一个弹出框 这种视图 用户可以传入想显示的内容 以及 弹出框消失的时间
//封装 弹出框->UILabel
//3秒后消失->定时器NSTimer
- (void)showAlertViewWithMessage:(NSString*)message{
//禁用button
FButton *button=[self.window viewWithTag:101];
button.enabled = NO;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];
label.backgroundColor = [UIColor orangeColor];
label.textColor = [UIColor whiteColor];
label.textAlignment = NSTextAlignmentCenter;
label.adjustsFontSizeToFitWidth = YES;
label.text = message;
label.tag = 100;
label.center = self.window.center;
[self.window addSubview:label];
[self performSelector:@selector(removeAlertView)withObject:nil afterDelay:3];
// [self XXX]等三秒再执行;
}
网友评论