美文网首页与时俱进的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