美文网首页与时俱进的IT
UI(三)控制类UIControl

UI(三)控制类UIControl

作者: 社会主义顶梁鹿 | 来源:发表于2018-07-30 17:41 被阅读0次

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]等三秒再执行;

}

相关文章

网友评论

    本文标题:UI(三)控制类UIControl

    本文链接:https://www.haomeiwen.com/subject/ehafvftx.html