zoukankan      html  css  js  c++  java
  • UIKit基础:9.使用代码创建属于我们的UI控件

    在前面的几个博文了, 我们知道了UIView的概念, 以及怎么快速的创建属于我们自己的UI控件, 但我之前也说过一句话,storyboard并不是万能的, 只有代码才是万能的, 而所有的UI控件都是通过代码实现的这就足矣说明, 代码有多万能了, 现在我们就来学习一下.


    首先这里要普及一个知识点, 在我们刚开始创建好项目的时候, 会有一个ViewController.mViewController.h文件, 在.m文件里有一个方法必须得实现, 否则我们所写的东西都无法实现:




    下面就是实现我们自定义控件的代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 创建并且初始化UIButton控件对象类型为System
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        
        // 设置Button的位置
        [button setFrame:CGRectMake(110, 220, 100, 40)];
        // 设置Button的背景颜色
        [button setBackgroundColor:[UIColor redColor]];
        // 设置在默认状态下的文字
        [button setTitle:@"我是按钮" forState:UIControlStateNormal];
        // 设置在被点击和被长按状态(也称为高亮状态)下的文字.
        [button setTitle:@"按钮是我" forState:UIControlStateHighlighted];
        
        // 把自定义的Button添加到UIView里去.
        [self.view addSubview:button];
    }
    



    这里要说一下, 其实UIButton类型有几种类型, 但有一个类型已经被合并了:

    typedef NS_ENUM(NSInteger, UIButtonType) {
        UIButtonTypeCustom = 0,                         // no button type
        UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button
    
        UIButtonTypeDetailDisclosure,
        UIButtonTypeInfoLight,
        UIButtonTypeInfoDark,
        UIButtonTypeContactAdd,
        
        UIButtonTypeRoundedRect = UIButtonTypeSystem,   // Deprecated, use UIButtonTypeSystem instead
    };
    



    我们一般使用UIButton就只用两个类型, 一个是System, 一个是Custom类型, 其他的都是比较少用.




    我们添加完Button之后, 如果需要点击该按钮之后进行些什么事情, 那就要用到监听的方法, 比如:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 创建并且初始化UIButton控件对象类型为System
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        
        // 设置Button的位置
        [button setFrame:CGRectMake(110, 220, 100, 40)];
        // 设置Button的背景颜色
        [button setBackgroundColor:[UIColor redColor]];
        // 设置在默认状态下的文字
        [button setTitle:@"我是按钮" forState:UIControlStateNormal];
        // 设置在被点击和被长按状态(也称为高亮状态)下的文字.
        [button setTitle:@"按钮是我" forState:UIControlStateHighlighted];
        
        // 添加监听方法
        [button addTarget:self action:@selector(myButton) forControlEvents:UIControlEventTouchUpInside];
        
        // 把自定义的Button添加到UIView里去.
        [self.view addSubview:button];
    }
    
    - (void)myButton
    {
        NSLog(@"点击我了~~~");
    }
    

    打印出来的结果:

    2015-02-14 01:36:45.895 UIKit-06使用代码创建[9388:777564] 点击我了~~~
    



    这里解释一下参数, action: 这个参数是监听哪个名字的方法, 而例子里, 我监听的是myButton的方法,forControlEvents:这个参数是Button点击的动作, 例子所设定的是点击后抬手, 在里面还有很多其他动作, 大家也可以回去各自尝试.



    细心的朋友应该会想到我们之前在storyboard创建的ButtonIBAction返回值, 而我们现在所监听的方法却是void类型, 那么这两个到底有什么区别呢? 其实这两个方法最大的区别就是IBAction可以连线, 而void不可以连线并且都可以设置参数和不设置参数, 例子中是没有设置参数的, 如果要设置参数, 那么就需要在监听的方法名加上分号, 比如:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 创建并且初始化UIButton控件对象类型为System
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        
        // 设置Button的位置
        [button setFrame:CGRectMake(110, 220, 100, 40)];
        // 设置Button的背景颜色
        [button setBackgroundColor:[UIColor redColor]];
        // 设置在默认状态下的文字
        [button setTitle:@"我是按钮" forState:UIControlStateNormal];
        // 设置在被点击和被长按状态(也称为高亮状态)下的文字.
        [button setTitle:@"按钮是我" forState:UIControlStateHighlighted];
        
        // 添加监听方法
        [button addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
        
        // 把自定义的Button添加到UIView里去.
        [self.view addSubview:button];
    }
    
    - (void)myButton:(UIButton *)sender
    {
        NSLog(@"点击我了~~~%@", [sender.titleLabel text]);
    }
    

    这个方法传入的参数必须是UIButton, 就和IBAction一样, 所传入的参数也只能是UIButton.




    UIButton讲到这里, 基本上都讲完了, 但有一个小细节, 经常使用iOS设备的朋友肯定会发现, 我们在iOS程序中所看到的UIButton全部都是图片, 并不是我们所写上去的文字, 那么在UIButton上是如何把图片载入呢? 下面让我们一起来看看:

        // 设置默认状态下的UIButton的前置图
        [button setImage:[UIImage imageNamed:@"Button.jpg"] forState:UIControlStateNormal];
        
        // 设置高亮状态下的UIButton的前置图
        [button setImage:[UIImage imageNamed:@"Button.jpg"] forState:UIControlStateHighlighted];
        
        // 设置默认状态下的UIButton的背景图
        [button setBackgroundImage:[UIImage imageNamed:@"Button.jpg"] forState:UIControlStateNormal];
        
        // 设置高亮状态下的UIButton的背景图
        [button setBackgroundImage:[UIImage imageNamed:@"Button.jpg"] forState:UIControlStateHighlighted];
    

    UIButton是一个比较特殊的控件, 它可以存放两张图片, 一张是前置图, 一张是背景图, 存放前置图的时候有一个注意点, 如果你的Button是有名字的话, 那么前置图会和名字平均分UIButton的宽度, 背景图却不会这样子, 下面是例子:



    这个就是存入前置图的效果





    有些人估计会觉得奇怪, 为什么storyboard那么好用, 反而选使用代码呢? 其实这个东西并不是说谁好谁坏,storyboard是有它的好处, 但如果一个界面要你添加几十个Button, 那不拖的累死了么? 用代码的话直接就一个for循环就搞定了, 我不崇尚只单独使用一种方法, 要结合我们实际开发的效率, 一切以效率为准则.



    好了, UIButton就讲到这里, 下次我们继续~~

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4333158.html
Copyright © 2011-2022 走看看