The Swift Code之设置UIButton的不同方式创建,以及不同的状态和外观

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The Swift Code之设置UIButton的不同方式创建,以及不同的状态和外观相关的知识,希望对你有一定的参考价值。

参考技术A 在设置rootViewController之后,在这个control里的viewDidLoad方法里,添加相应的代码.设置了9个不同类型的UIButton

创建了有状态的button,以及添加button事件

创建没有状态的button
创建一个图片加文字的按钮,只要图片就不需要设置title
从系统定义的button类型创建button
创建禁止button
创建一个圆角button
部分圆角button,主要是利用layer的mask属性,在通过CAShaperLayer和UIBezierPath来画
创建折角button
创建border的button
import UIKit

class ViewController: UIViewController

override func viewDidLoad()
super.viewDidLoad()

//创建有状态的按钮
var btn:UIButton = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 25))

btn.setTitle("点击按钮", forState: UIControlState.Highlighted)
btn.setTitle("未点击", forState: UIControlState.Normal)
btn.backgroundColor = UIColor.blackColor()
self.view.addSubview(btn)
//给按钮添加点击事件
btn.addTarget(self, action: "clickEvent:", forControlEvents: UIControlEvents.TouchUpInside)

//创建没有状态的按钮
var btn2:UIButton = UIButton(frame: CGRect(x: 50, y: 85, width: 100, height: 35))
btn2.setTitle("Normal", forState: UIControlState.Normal)
btn2.backgroundColor = UIColor.blueColor()
self.view.addSubview(btn2)

//创建一个图片加文字的按钮
var btn3:UIButton = UIButton(frame: CGRect(x: 50, y: 130, width: 180, height: 35))
btn3.setImage(UIImage(named: "btn1"), forState: UIControlState.Normal)
btn3.titleLabel?.font = UIFont.boldSystemFontOfSize(30)
btn3.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
//btn3.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
btn3.setTitle("图片按钮", forState: UIControlState.Normal)
self.view.addSubview(btn3)

//从系统定义的按钮类型创建Button
var btn4:UIButton = UIButton.buttonWithType(UIButtonType.ContactAdd) as! UIButton
//btn4.backgroundColor = UIColor.brownColor()
btn4.frame.offset(dx: 60, dy: 200)
self.view.addSubview(btn4)

//创建禁止按钮
var btn5:UIButton = UIButton(frame: CGRect(x: 50, y: 240, width: 100, height: 35))
btn5.setTitle("点击按钮", forState: UIControlState.Highlighted)
btn5.setTitle("禁止按钮", forState: UIControlState.Normal)
btn5.enabled = false //设置按钮不能点击
btn5.setTitleColor(UIColor.redColor(), forState: UIControlState.Disabled)//代表已经禁止
btn5.backgroundColor = UIColor.purpleColor()
self.view.addSubview(btn5)

//创建一个圆角按钮
var btn6:UIButton = UIButton(frame: CGRect(x: 50, y: 280, width: 100, height: 35))
btn6.backgroundColor = UIColor.whiteColor()
btn6.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
btn6.setTitle("圆角按钮", forState: UIControlState.Normal)
btn6.layer.cornerRadius = 5
self.view.addSubview(btn6)

//部分圆角按钮,主要是利用layer的mask属性,在通过CAShaperLayer和UIBezierPath来画
var btn7:UIButton = UIButton(frame: CGRect(x: 50, y: 330, width: 100, height: 35))
btn7.backgroundColor = UIColor.whiteColor()
btn7.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
btn7.setTitle("部分圆角按钮", forState: UIControlState.Normal)

let shape:CAShapeLayer = CAShapeLayer()
let bepath:UIBezierPath = UIBezierPath(roundedRect: btn6.bounds, byRoundingCorners: UIRectCorner.TopRight|UIRectCorner.TopLeft, cornerRadii: CGSize(width: 15, height: 15))

UIColor.blackColor().setStroke()
shape.path = bepath.CGPath

btn7.layer.mask = shape
self.view.addSubview(btn7)

//创建折角按钮
var btn8:UIButton = UIButton(frame: CGRect(x: 50, y: 380, width: 100, height: 35))
btn8.backgroundColor = UIColor.whiteColor()

btn8.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
btn8.setTitle("折角按钮", forState: UIControlState.Normal)

let shape8:CAShapeLayer = CAShapeLayer()
let bepath8:UIBezierPath = UIBezierPath()
bepath8.moveToPoint(CGPoint(x: 0,y: 0))
bepath8.addLineToPoint(CGPoint(x: 80,y: 0))

bepath8.addLineToPoint(CGPoint(x: 100,y: 15))
bepath8.addLineToPoint(CGPoint(x: 100,y: 35))
bepath8.addLineToPoint(CGPoint(x: 0,y: 35))
bepath8.closePath()

shape8.path = bepath8.CGPath

btn8.layer.mask = shape8
self.view.addSubview(btn8)

//创建border按钮
var btn9:UIButton = UIButton(frame: CGRect(x: 50, y: 420, width: 100, height: 35))
btn9.backgroundColor = UIColor.whiteColor()
btn9.setTitle("边框按钮", forState: UIControlState.Normal)
btn9.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
btn9.layer.borderColor = UIColor.blackColor().CGColor
btn9.layer.borderWidth = 1
btn9.layer.cornerRadius = 5
self.view.addSubview(btn9)

//



override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.


func clickEvent(sender:AnyObject)
NSLog("按钮点击了事件")


Swift 设置子类 UIButton ButtonType

【中文标题】Swift 设置子类 UIButton ButtonType【英文标题】:Swift Setting subclass UIButton ButtonType 【发布时间】:2020-01-11 22:19:11 【问题描述】:

我有一个简单的 UIButton 子类

class IconButton: UIButton 

    init(type: FontAwesomeStyle, icon: FontAwesome, color: UIColor = .black, size: CGFloat = 20) 
        super.init(frame: CGRect.zero)

        let iconAsText = String.fontAwesomeIcon(name: icon)
        let iconText = NSMutableAttributedString(string: iconAsText, attributes: [
            NSAttributedString.Key.font: UIFont.fontAwesome(ofSize: size, style: type)
        ])

        setAttributedTitle(iconText, for: .normal)
        setTitleColor(color, for: .normal)

    

    required init?(coder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

我遇到的问题是我希望按钮具有系统按钮所具有的行为。特别是当您按住按钮时,它会改变颜色。

let button = UIButton(type: .system)

由于 buttonType 是 UIButton 的仅获取属性,而 UIButton.init(type: UIButton.ButtonType) 是便利初始化器,我不知道如何实现这个子类。

【问题讨论】:

【参考方案1】:

仍然不确定是否可以在子类中复制 .system 按钮类型,但获得我想要的行为的解决方案如下:

class IconButton: UIButton 

    override var isHighlighted: Bool 
        willSet(newVal) 
           if newVal != isHighlighted 
               // newVal is true when the button is being held down

           
        
    

    // Rest of class...

【讨论】:

以上是关于The Swift Code之设置UIButton的不同方式创建,以及不同的状态和外观的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之UIButton的使用(swift)

iOS开发之UIButton的使用(swift)

iOS开发之UIButton的使用(swift)

如何在swift5中获取UIButton名称?

Swift - UIButton 以编程方式设置约束

Swift - 无论状态如何设置 UIButton 标题