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就讲到这里, 下次我们继续~~

转载于:https://www.cnblogs.com/iOSCain/p/4333158.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【课程特点】1、231节大容量课程:包含了SwiftUI的大部分知识点,详细讲解SwiftUI的方方面面;2、15个超级精彩的实例:包含美食、理财、健身、教育、电子商务等各行业的App实例;3、创新的教学模式:手把手教您SwiftUI用户界面开发技术,一看就懂,一学就会;4、贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;5、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您宝贵的时间;6、视频短小精悍:即方便于您的学习和记忆,也方便日后对功能的检索;7、齐全的学习资料:提供所有课程的源码,在Xcode 11 + iOS 13环境下测试通过; 更好的应用,更少的代码!SwiftUI是苹果主推的下一代用户界面搭建技术,具有声明式语法、实时生成界面预览等特性,可以为苹果手机、苹果平板、苹果电脑、苹果电视、苹果手表五个平台搭建统一的用户界面。SwiftUI是一种创新、简单的iOS开发中的界面布局方案,可以通过Swift语言的强大功能,在所有的Apple平台上快速构建用户界面。 仅使用一组工具和API为任何Apple设备构建用户界面。SwiftUI具有易于阅读和自然编写的声明式Swift语法,可与新的Xcode设计工具无缝协作,使您的代码和设计**同步。自动支持动态类型、暗黑模式、本地化和可访问性,意味着您的**行SwiftUI代码已经是您编写过的非常强大的UI代码了。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值