Swift:UIButton 自定义
Posted
技术标签:
【中文标题】Swift:UIButton 自定义【英文标题】:Swift: UIButton Customization 【发布时间】:2016-05-31 04:33:24 【问题描述】:作为最佳实践,我想将自定义 UIButtons
的代码从我的 viewcontroller
类中移出。我下面的代码是为UIButtons
添加一个白色边框,我想在整个项目的按钮上轻松调用它。
//White Border
let passwordBorder = CALayer()
let width = CGFloat(5.0)
passwordBorder.borderColor = UIColor.whiteColor().CGColor
passwordBorder.frame = CGRect(x: 0, y: 0, width: passwordField.frame.size.width, height: passwordField.frame.size.height)
passwordBorder.borderWidth = width
passwordField.layer.addSublayer(passwordBorder)
passwordField.layer.masksToBounds = true
如何将此代码放入辅助函数中以便我可以轻松调用它?
我是编码新手,在 UI
的任何东西上都遇到了帮助函数的问题。谢谢!
【问题讨论】:
您希望按钮的自定义类型 创建一个函数,该函数返回您想要重用代码的带边框按钮 你可以看看这个答案:***.com/a/27645782/6080920 【参考方案1】:看看 Swift 的扩展。你可以很容易地做类似的事情
extension UIButton
func setPasswordBorderColor(borderColor: UIColor)
//White Border
let passwordBorder = CALayer()
let width = CGFloat(5.0)
passwordBorder.borderColor = borderColor.CGColor
passwordBorder.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height)
passwordBorder.borderWidth = width
self.layer.addSublayer(passwordBorder)
self.layer.masksToBounds = true
【讨论】:
【参考方案2】:import UIKit
//
@IBDesignable
class CustomBorderButton: UIButton
@IBInspectable var cornerRadius: CGFloat = 0
didSet
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
@IBInspectable var borderWidth: CGFloat = 0
didSet
layer.borderWidth = borderWidth
@IBInspectable var borderColor: UIColor?
didSet
layer.borderColor = borderColor?.CGColor
【讨论】:
【参考方案3】:无需代码即可配置按钮
选择您的按钮,然后选择身份检查器,然后添加
“用户定义的运行时属性”。查看屏幕截图了解更多详情
在您的项目中添加 CALayer+XibConfiguration.h & CALayer+XibConfiguration.m
对于 CALayer+XibConfiguration 打开这个link 并下载 CALayer+XibConfiguration
【讨论】:
【参考方案4】:有几种方法可以实现这一点,例如使用类别、子类化UIButton
,或在类中创建函数(可能是所有其他类继承的基类。)等。
通过使用你可以做的功能
func cutomizeButton(frame : CGRect, title : String) -> UIButton
let button : UIButton = UIButton(type: .Custom)
button.frame = frame
button.layer.borderWidth = 5.0
button.layer.borderColor = UIColor.whiteColor().CGColor;
button.layer.masksToBounds = true
button.titleLabel?.text = title;
//do other stuff
return button;
【讨论】:
【参考方案5】:在辅助类中制作方法
func customiseButton(button:UIButton)
//White Border
let passwordBorder = CALayer()
let width = CGFloat(5.0)
passwordBorder.borderColor = UIColor.whiteColor().CGColor
passwordBorder.frame = CGRect(x: 0, y: 0, width: button.frame.size.width, height: button.frame.size.height)
passwordBorder.borderWidth = width
button.layer.addSublayer(passwordBorder)
button.layer.masksToBounds = true
在 ViewController 中调用这个方法
HelperClass().customiseButton(passwordField)
【讨论】:
【参考方案6】:你可以试试这个圆形按钮的扩展:
extension UIButton
func roundCorners(corners:UIRectCorner, radius: CGFloat)
let borderLayer = CAShapeLayer()
borderLayer.frame = self.layer.bounds
borderLayer.strokeColor = UIColor.green.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.lineWidth = 10.5
let path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: corners,
cornerRadii: CGSize(width: radius, height: radius))
borderLayer.path = path.cgPath
self.layer.addSublayer(borderLayer)
【讨论】:
以上是关于Swift:UIButton 自定义的主要内容,如果未能解决你的问题,请参考以下文章
从数组中设置自定义单元格 uibutton 标题 - Swift
UIButton 不适用于自定义 UITableViewCell (Swift)
通过扩展 UIButton 类使用 Swift 创建自定义按钮