Swift UIButton使用教程

一.UIButton基本操作

1.创建按钮

let btn: UIButton = UIButton()//没有样式
let btns:UIButton =UIButton(type: UIButtonType)//有样式
let button = UIButton(frame:CGRect(x:10, y:150, width:100, height:30))//简化创建方式

UIButtonType有以下类型

public enum UIButtonType : Int {
 case custom // no button type
 @available(iOS 7.0, *)
 case system // standard system button
 case detailDisclosure
 case infoLight
 case infoDark
 case contactAdd
 public static var roundedRect: UIButtonType { get } // Deprecated, use UIButtonTypeSystem instead
}
//使用
let btn: UIButton = UIButton(type: .Custom)

UIButton状态类型

/**
Normal (默认状态)
Highlighted (高亮状态)点击按钮不放
Disabled (使能状态)就是是否可用状态-->禁用的状态才会显现
Selected (选中状态)通过selected属性设置
*/

2、UIButton设置字内容和颜色

//显示文字
button1.setTitle("普通状态", for: .normal)
button1.setTitle("高粱状态", for: .highlighted)
button1.setTitle("禁用状态", for: .disabled)
//显示文字颜色
button1.setTitleColor(UIColor.red, for: .normal)
button1.setTitleColor(UIColor.blue, for: .highlighted)
button1.setTitleColor(UIColor.cyan, for: .selected)
button1.setTitleColor(UIColor.cyan, for: .disabled)
//阴影文字颜色设置
button1.setTitleShadowColor(UIColor.cyan, for: .normal)
button1.setTitleShadowColor(UIColor.green, for: .highlighted)
button1.setTitleShadowColor(UIColor.brown, for: .disabled)
button1.setTitleShadowColor(UIColor.darkGray, for: .selected)

3.UIButton设置背景颜色和背景图片

//背景颜色
button2.backgroundColor = UIColor.orange
//背景图片
button4.setBackgroundImage(UIImage(named:"XXX"), for: .normal)

4.UIButton设置字体大小

button.titleLabel?.font = UIFont.systemFont(ofSize: 12)

5.禁用UIButton

button.isEnabled = false
button.isEnabled = true

6.设置圆角

button.layer.cornerRadius = 5
button.layer.masksToBounds = true

7.设置边框宽度/颜色

button.layer.borderWidth = 2
button.layer.borderColor = UIColor.red.cgColor

8.设置背景图片为圆角

buttonImage.setImage(UIImage(named:"1") , forState: UIControlState.Normal)
//设置背景图片为圆角
buttonImage.imageView?.layer.cornerRadius = 50

默认情况下按钮会被渲染成单一颜色;系统蓝
button.setImage(UIImage(named:"icon1"),forState:.Normal) //设置图标
button.adjustsImageWhenHighlighted=false //使触摸模式下按钮也不会变暗(半透明)
button.adjustsImageWhenDisabled=false //使禁用模式下按钮也不会变暗(半透明)

也可以设置成保留图标原来的颜色
let iconImage = UIImage(named:"icon2")?.withRenderingMode(.alwaysOriginal)
button.setImage(iconImage, for:.normal) //设置图标
button.adjustsImageWhenHighlighted = false //使触摸模式下按钮也不会变暗(半透明)
button.adjustsImageWhenDisabled = false //使禁用模式下按钮也不会变暗(半透明)

9.UIButton上图片和文字调整

UIButton上添加图片和文字,有时需要我们调整方向为逆时针方向,上、左、下、右依次去设置的

btn.imageEdgeInsets =UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)

btn.titleEdgeInsets =UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)

实例如下:

//创建一个图片一个文字的按钮
let btn2: UIButton = UIButton(type: .Custom)
btn2.frame = CGRectMake(50, 100, 120, 35)
btn2.setImage(UIImage(named: "1"), forState: .Normal)
btn2.backgroundColor = UIColor.blackColor()
btn2.titleLabel?.font = UIFont.systemFontOfSize(20)
btn2.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
btn2.setTitle("图片按钮", forState: .Normal)
//偏移量,分别为上下左右
btn2.imageEdgeInsets = UIEdgeInsetsMake(0, -50, 0, 0)
btn2.titleEdgeInsets = UIEdgeInsetsMake(0, -80, 0, 5)
btn2.setTitleColor(UIColor.whiteColor(), forState: .Normal)
btn2.adjustsImageWhenHighlighted = false
self.view.addSubview(btn2) 

10.添加按钮的点击事件

按钮的触摸时间有以下类型

touchDown:单点触摸按下事件,点触屏幕
touchDownRepeat:多点触摸按下事件,点触计数大于1,按下第2、3或第4根手指的时候
touchDragInside:触摸在控件内拖动时
touchDragOutside:触摸在控件外拖动时
touchDragEnter:触摸从控件之外拖动到内部时
touchDragExit:触摸从控件内部拖动到外部时
touchUpInside:在控件之内触摸并抬起事件
touchUpOutside:在控件之外触摸抬起事件
touchCancel:触摸取消事件,即一次触摸因为放上太多手指而被取消,或者电话打断

button1.addTarget(self,action:#selector(methodName), for: .touchUpInside)
button1.addTarget(self, action:#selector(someMethod(button:)), for:.touchUpInside)
//上
 func methodName() {
  print("tapped")
 }

//下
 func someMethod(button:UIButton) {
  print("你是谁啊,其实就是一个按钮")
 }

二.自定义操作

1.UIButton的图片文字布局

创建一个按钮且其同时拥有文字和图片属性,会按照系统的默认样式(左图片,右文字)显示。但是有的时候,我们会遇到其他的设计需求,比如:左文字有图片、上文字下图片、上图片下文字等。这个时候就需要我们自定义按钮的显示样式来满足复杂多变的设计需求了。 我自定义了一个按钮的extension来满足以上的功能,代码如下:

import Foundation
import UIKit

enum ButtonLayout {
 case leftImage
 case rightImage
 case topImage
 case bottomImage
}

extension UIButton {

 func setLayoutType(type: ButtonLayout){
  let image: UIImage? = self.imageView?.image
  switch type {
  case .leftImage:
   print("系统默认的方式")
  case .rightImage:
   self.imageEdgeInsets = UIEdgeInsets(top:0, left: (self.titleLabel?.frame.size.width)!, bottom: 0, right:-(self.titleLabel?.frame.size.width)!)
   self.titleEdgeInsets = UIEdgeInsets(top: 0, left: -(image?.size.width)!, bottom: 0, right: (image?.size.width)!)
  case .topImage:
   self.imageEdgeInsets = UIEdgeInsets(top:-(self.titleLabel?.frame.size.height)!, left: 0, bottom: 0, right:-((self.titleLabel?.frame.size.width)!))
   //图片距离右边框距离减少图片的宽度,距离上m边距的距离减少文字的高度
   self.titleEdgeInsets = UIEdgeInsets(top: ((image?.size.height)!), left: -((image?.size.width)!), bottom: 0, right:0)
  //文字距离上边框的距离增加imageView的高度,距离左边框减少imageView的宽度,距离下边框和右边框距离不变
  default:
   self.imageEdgeInsets = UIEdgeInsets(top: (self.titleLabel?.frame.size.height)!, left:0, bottom: 0, right:-((self.titleLabel?.frame.size.width)!))
   //图片距离上边距增加文字的高度 距离右边距减少文字的宽度
   self.titleEdgeInsets = UIEdgeInsets(top: -(image?.size.height)!, left: -(image?.size.width)!, bottom: 0, right: 0)
  }
 }
}

以上就是Swift UIButton使用教程的详细内容,更多关于Swift UIButton的资料请关注我们其它相关文章!

(0)

相关推荐

  • 用SwiftUI实现3D Scroll滚动效果的实现代码

    本文介绍了用SwiftUI实现3D Scroll效果的实现代码,分享给大家,具体如下: 我们预览下今天要实现的 3D scroll 效果.学完本教程后,你就可以在你的 App 中把这种 3D 效果加入任何自定义的 SwiftUI 视图.下面我们来开始本教程的学习. 入门 首先,创建一个新的 SwiftUI 视图.为了举例说明,在这个新视图中,我会展示一个有各种颜色的矩形列表,并把新视图命名为 ColorList . import SwiftUI struct ColorList: View {

  • 浅析Swift中struct与class的区别(汇编角度底层分析)

    概述 相对Objective-C, Swift使用结构体Struct的比例大大增加了,其中Int, Bool,以及String,Array等底层全部使用Struct来定义!在Swift中结构体不仅可以定义成员变量(属性),还可以定义成员方法,和类比较相似,都是具有定义和使用属性,方法以及初始化器等面向对象特性,但是结构体是不具有继承性,不具备运行时强制类型转换的以及引用计数等能力的! 下面来从汇编角度分析struct与class的区别! 基本知识 1.结构体 自动初始化器 在63行的调用中可以传

  • Swift4使用GCD实现计时器

    开发过程中,我们可能会经常使用到计时器.苹果为我们提供了Timer.但是在平时使用过程中会发现使用Timer会有许多的不便 1:必须保证在一个活跃的runloop,我们知道主线程的runloop是活跃的,但是在其他异步线程runloop就需要我们自己去开启,非常麻烦. 2:Timer的创建和销毁必须在同一个线程.跨线程就操作不了 3:内存问题.可能循环引用造成内存泄露 由于存在上述问题,我们可以采用GCD封装来解决. import UIKit typealias ActionBlock = ()

  • Swift实现倒计时5秒功能

    一般在项目的"引导页"有个功能,倒计时5秒结束后,然后可以允许用户点击跳过按钮跳过引导页.同样在"登录"和"注册"页面也有类似功能,发送验证码后,计时60秒后才允许用户再次请求重新发送验证码. 计时方式一(sleep + performSelector) 通过调用sleep(1)阻塞线程的方式来达到目的 import UIKit class GAPublishViewController: GABaseViewController { var j

  • iOS SwiftUI 颜色渐变填充效果的实现

    SwiftUI 为我们提供了各种梯度选项,所有这些选项都可以通过多种方式使用. Gradient 渐变器 A color gradient represented as an array of color stops, each having a parametric location value. gradient是一组颜色的合集,每个颜色都忽略位置参数 LinearGradient 线性渐变器 线性渐变器拥有沿轴进行渐变函数,我们可以自定义设置颜色空间.起点和终点. 下面我们看看Linear

  • IOS在SwiftUI中显示模态视图的实例代码

    简介 这里教大家如何弹出一个简单的模态视图.分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B.我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图. 步骤 在A视图中创建按钮和模态视图代码 struct ContentView: View { @State var isPresented = false var body: some View { Button(action: { self.isPresented = true

  • Swift实现3D轮播图效果

    本文实例为大家分享了Swift实现3D轮播图效果的具体代码,供大家参考,具体内容如下 整天逛淘宝,偶尔有一天看到其中的展示页有个看起来很炫的效果,闲来无事就试着写一个出来,先来看效果: 简单记一下思路,这里我选择使用UICollectionView控件,先根据其复用和滚动的特性做出无限轮播的效果,关键代码: //数据源数组 let totalCount = 100 var models: [String] = [String]() { didSet { //判断元素个数 if models.co

  • Swift 进阶 - map 和 flatMap的使用

    map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下. 集合上使用 map 和 flatMap 先看如下的代码: func getInfos(by name: String) -> [String] { if name == "Jack" { return ["Male", "25", "New York"] } else if name == "Lucy" { ret

  • Swift UIButton使用教程

    一.UIButton基本操作 1.创建按钮 let btn: UIButton = UIButton()//没有样式 let btns:UIButton =UIButton(type: UIButtonType)//有样式 let button = UIButton(frame:CGRect(x:10, y:150, width:100, height:30))//简化创建方式 UIButtonType有以下类型 public enum UIButtonType : Int { case cus

  • Swift hello world!Swift快速入门教程

    通常来说,编程语言教程中的第一个程序应该在屏幕上打印"Hello, world".在 Swift 中,可以用一行代码实现: 复制代码 代码如下: println("hello, world") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式--在 Swift 中,这行代码就是一个完整的程序.你不需要为了输入输出或者字符串处理导入一个单独的库.全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数.你同样不需要在每个语句结尾

  • 零基础上手Swift快速入门教程概览

    Swift是苹果的品牌新的编程语言,在2014年WWDC(苹果开发者大会)上发布的编程语言. 随着Swift语言的发布,苹果也发布了一个出色的SWIFT的参考指南,这里强烈推荐. 但是这个学习指南又长又瘦!所以,如果没有很多的时间,只是想快速学习Swift,那么本教程就是为你准备的. 本 Swift 教程将需要大约25分钟学习,给出 Swift 语言一个快速浏览,包括变量,控制流,类等以及更多的最佳实践. 对于本Swift教程,需要Xcode最新版本(在写这篇Swift教程的时候使用的是Xcod

  • Swift 编程语言入门教程

    原文地址:http://gashero.iteye.com/blog/2075324 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Obj

  • 利用Swift实现一个响应式编程库

    前言 整个2017年我完全使用 Swift 进行开发了.使用 Swift 进行开发是一个很愉快的体验,我已经完全不想再去碰 OC 了.最近想做一个响应式编程的库,所以就把它拿来分享一下. 在缺乏好的资源的情况下,学习响应式编程成为痛苦.我开始学的时候,做死地找各种教程.结果发现有用的只是极少部分,而且这少部分也只是表面上的东西,对于整个体系结构的理解也起不了多大的作用. Reactive Programing 说到响应式编程,ReactiveCocoa 和 RxSwift 可以说是目前 iOS

  • 因为一个Crash引发对Swift构造器的思考分析

    前言 不久前,公司决定在一个 Objective-C 老工程中,开始使用 Swift 进行混合开发.期间,碰到一个与 Swift 类构造过程相关的 Crash.在解决的过程中,对 Swift 构造过程有了更深刻的理解,特作此记录,期望对刚入坑 Swift 开发的同学能有所帮助. Crash 回顾 先来看一下代码,以下定义了 BaseiewController 和 AViewController 两个类: // BaseViewController.h #import <UIKit/UIKit.h

  • Swift 5.1 之类型转换与模式匹配的教程详解

    类型转换在Swift中使用 is 和 as 操作符实现. 类型检查 使用操作符 is 检查一个实例是否是某个确定的类以及其继承体系的父类或子类类型.如果是某个确定的类(该类继承体系的父类或子类)类型,则返回 true ,否则返回 false . class Cat { func hairColor() -> String { return "五颜六色" } } class WhiteCat: Cat { override func hairColor() -> String

  • swift使用SDPhotoBriwser浏览图片教程

    场景:我们在使用app的时候,特别是显示多张图片的时候,都会点击图片并进行浏览,比如QQ.微信,好友发表的动态,我们都会点击进去查看原图.现在很多app都支持图片浏览功能,这样更加方便用户体验,那么我们在项目开发过程中,怎么对图片点击进行预览,下面介绍一下在swift项目开发中使用SDPhotoBrowser进行图片浏览. SDPhotoBrowser地址:https://github.com/gsdios/SDPhotoBrowser 下面直接代码进行说明 // // ShopStoreTab

  • Swift进阶教程Mirror反射示例详解

    目录 元类型与.self AnyObject AnyClass Any type(Of:) self self在方法里面的作用 Self Swift Runtime Mirror Mirror的基本用法 Mirror的简单应用-JSON解析 Mirror源码解析 Enum Metadata探索 还原TargetEnumMetadata 还原TargetEnumDescriptor 相对偏移指针 打印枚举中的属性 Struct Metadata探索 获取结构体的属性 swift_getTypeBy

  • Swift学习教程之访问控制详解

    前言 本文主要给大家介绍了关于Swift访问控制的相关内容,访问控制对访问你的其他代码源文件和模块部分进行了约束.这个特性允许你隐藏你的代码实现,并且指定通过其可以访问和使用该代码的优选接口. class,structure 和 enumeration 都可以指定访问级别,当然,property,method,initializer 和 属于这里类型的 subscript.protocol 可以限制到某个上下文,全局变量,变量和函数也可以. 另外,Swift 也提供默认的使用级别给典型的使用场景

随机推荐