如何在UIButton中创建边框?

iPh*_*one 170 objective-c ios

我在我的应用程序中使用名为"addButton"的自定义按钮,我想用白色边框,我如何在我的自定义按钮周围获得白色边框?

bry*_*mac 348

您可以通过访问按钮的图层属性来设置CALayer上的边框属性.

首先,添加Quartz

#import <QuartzCore/QuartzCore.h>
Run Code Online (Sandbox Code Playgroud)

设置属性:

myButton.layer.borderWidth = 2.0f;
myButton.layer.borderColor = [UIColor greenColor].CGColor;
Run Code Online (Sandbox Code Playgroud)

看到:

https://developer.apple.com/documentation/quartzcore/calayer#//apple_ref/occ/cl/CALayer

上面链接中的CALayer允许您设置其他属性,如角半径,maskToBounds等...

另外,关于按钮乐趣的好文章:

https://web.archive.org/web/20161221132308/http://www.apptite.be/tutorial_custom_uibuttons.php

  • 确保在目标编辑器的Build Phases选项卡中将目标链接到QuartCore框架. (3认同)

Aje*_*rya 49

它非常简单,只需在您的文件中添加quartzCore标头(为此您必须将石英框架添加到您的项目中)

然后这样做

[[button layer] setCornerRadius:8.0f];

[[button layer] setMasksToBounds:YES];

[[button layer] setBorderWidth:1.0f];
Run Code Online (Sandbox Code Playgroud)

您可以根据需要更改浮点值.

请享用.


这是一些典型的现代代码......

self.buttonTag.layer.borderWidth = 1.0f;
self.buttonCancel.layer.borderWidth = 1.0f;

self.buttonTag.layer.borderColor = [UIColor blueColor].CGColor;
self.buttonCancel.layer.borderColor = [UIColor blueColor].CGColor;

self.buttonTag.layer.cornerRadius = 4.0f;
self.buttonCancel.layer.cornerRadius = 4.0f;
Run Code Online (Sandbox Code Playgroud)

这与分段控件的外观相似.


ton*_*ong 21

在swift中,您不需要导入"QuartzCore/QuartzCore.h"

只需使用:

button.layer.borderWidth = 0.8
button.layer.borderColor = (UIColor( red: 0.5, green: 0.5, blue:0, alpha: 1.0 )).cgColor
Run Code Online (Sandbox Code Playgroud)

要么

button.layer.borderWidth = 0.8
button.layer.borderColor = UIColor.grayColor().cgColor
Run Code Online (Sandbox Code Playgroud)


jua*_*njo 20

问题设置图层的borderWidthborderColor是,当你触摸按钮的边框没有设置动画的高光效果.

当然,您可以观察按钮的事件并相应地更改边框颜色,但这种感觉是不必要的.

另一种选择是创建一个可伸缩的UIImage并将其设置为按钮的背景图像.您可以在Images.xcassets中创建一个图像集,如下所示:

Images.xcassets

然后,将其设置为按钮的背景图像:

按钮属性

如果您的图像是模板图像,您可以设置按钮的色调颜色,边框将更改:

最终按钮

现在,边框将在触摸时突出显示按钮的其余部分.


Ale*_*lex 8

要更改按钮半径,颜色和宽度我设置如下:

self.myBtn.layer.cornerRadius = 10;
self.myBtn.layer.borderWidth = 1;
self.myBtn.layer.borderColor =[UIColor colorWithRed:189.0/255.0f green:189.0/255.0f blue:189.0/255.0f alpha:1.0].CGColor;
Run Code Online (Sandbox Code Playgroud)


Lal*_*oop 8

这是Ben Packard 回答的更新版本(Swift 3.0.1).

import UIKit

@IBDesignable class BorderedButton: UIButton {

    @IBInspectable var borderColor: UIColor? {
        didSet {
            if let bColor = borderColor {
                self.layer.borderColor = bColor.cgColor
            }
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    override var isHighlighted: Bool {
        didSet {
            guard let currentBorderColor = borderColor else {
                return
            }

            let fadedColor = currentBorderColor.withAlphaComponent(0.2).cgColor

            if isHighlighted {
                layer.borderColor = fadedColor
            } else {

                self.layer.borderColor = currentBorderColor.cgColor

                let animation = CABasicAnimation(keyPath: "borderColor")
                animation.fromValue = fadedColor
                animation.toValue = currentBorderColor.cgColor
                animation.duration = 0.4
                self.layer.add(animation, forKey: "")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于@IBDesignable@IBInspectable标签,生成的按钮可以在StoryBoard中使用.

在此输入图像描述

此外,定义的两个属性允许您直接在界面构建器上设置边框宽度和颜色,并预览结果.

在此输入图像描述

可以以类似的方式添加其他属性,用于边界半径和突出显示渐变时间.


Vin*_*ain 6

您现在不需要导入QuartzCore.h.参考iOS 8 sdk和Xcode 6.1.

直接使用:

[[myButton layer] setBorderWidth:2.0f];
[[myButton layer] setBorderColor:[UIColor greenColor].CGColor];
Run Code Online (Sandbox Code Playgroud)


Ben*_*ard 6

这是一个UIButton子类,支持突出显示状态动画而不使用图像.当视图的色调模式更改时,它还会更新边框颜色.

class BorderedButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)

        layer.borderColor = tintColor.CGColor
        layer.borderWidth = 1
        layer.cornerRadius = 5

        contentEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("NSCoding not supported")
    }

    override func tintColorDidChange() {
        super.tintColorDidChange()

        layer.borderColor = tintColor.CGColor
    }

    override var highlighted: Bool {
        didSet {
            let fadedColor = tintColor.colorWithAlphaComponent(0.2).CGColor

            if highlighted {
                layer.borderColor = fadedColor
            } else {
                layer.borderColor = tintColor.CGColor

                let animation = CABasicAnimation(keyPath: "borderColor")
                animation.fromValue = fadedColor
                animation.toValue = tintColor.CGColor
                animation.duration = 0.4
                layer.addAnimation(animation, forKey: "")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let button = BorderedButton(style: .System) //style .System is important

出现:

在此输入图像描述

在此输入图像描述


BHU*_*MAR 5

这可以通过2017年8月最新版本的Swift 3.0中的各种方法实现

选项1:

直接为UI Button分配borderWidth属性值:

  btnUserButtonName.layer.borderWidth = 1.0
Run Code Online (Sandbox Code Playgroud)

使用UI按钮的默认颜色值设置标题:

btnUserButtonName.setTitleColor(UIColor.darkGray, for: .normal)
Run Code Online (Sandbox Code Playgroud)

使用默认颜色设置边框作为UI按钮的边框属性值:

btnUserButtonName.layer.borderColor = UIColor.red
Run Code Online (Sandbox Code Playgroud)

为UI按钮的边框属性值设置用户定义的颜色:

   let myGrayColor = UIColor(red: 0.889415, green: 0.889436, blue:0.889424, alpha: 1.0 )
   btnUserButtonName.layer.borderColor = myGrayColor.cgColor
Run Code Online (Sandbox Code Playgroud)

选项2:[推荐]

使用Extension方法,因此通过应用程序的Button将看起来一致,并且不需要在每个地方重复多行代码.

//Create an extension class in any of the swift file

extension UIButton {
func setBordersSettings() {
        let c1GreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
        self.layer.borderWidth = 1.0
        self.layer.cornerRadius = 5.0
        self.layer.borderColor = c1GreenColor.cgColor
        self.setTitleColor(c1GreenColor, for: .normal)
        self.layer.masksToBounds = true
    }
}
Run Code Online (Sandbox Code Playgroud)

用法代码:

//use the method and call whever the border has to be applied

btnUserButtonName.setBordersSettings()
Run Code Online (Sandbox Code Playgroud)

扩展方法输出按钮:

在此输入图像描述


Fah*_*man 5

雨燕5

button.layer.borderWidth = 2
Run Code Online (Sandbox Code Playgroud)

要更改边框的颜色,请使用

button.layer.borderColor = CGColor(srgbRed: 255/255, green: 126/255, blue: 121/255, alpha: 1)
Run Code Online (Sandbox Code Playgroud)

  • Button.layer.borderColor = UIColor.gray.cgColor 也可以接受! (2认同)