我正在Xcode 6的最新版本中使用swift构建一个应用程序,我想知道如何修改我的按钮,使它可以有一个圆形的边界,如果需要,我可以调整自己。一旦完成,我如何改变边界本身的颜色而不添加背景?换句话说,我想要一个略圆的按钮,没有背景,只有一个特定颜色的1pt边界。
当前回答
我认为这是简单的形式
Button1.layer.cornerRadius = 10(Half of the length and width)
Button1.layer.borderWidth = 2
其他回答
你可以子类化UIButton并给它添加@IBInspectable变量,这样你就可以通过StoryBoard的“Attribute Inspector”配置自定义按钮参数。下面我写下代码。
@IBDesignable
class BHButton: UIButton {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
@IBInspectable lazy var isRoundRectButton : Bool = false
@IBInspectable public var cornerRadius : CGFloat = 0.0 {
didSet{
setUpView()
}
}
@IBInspectable public var borderColor : UIColor = UIColor.clear {
didSet {
self.layer.borderColor = borderColor.cgColor
}
}
@IBInspectable public var borderWidth : CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
// MARK: Awake From Nib
override func awakeFromNib() {
super.awakeFromNib()
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
if isRoundRectButton {
self.layer.cornerRadius = self.bounds.height/2;
self.clipsToBounds = true
}
else{
self.layer.cornerRadius = self.cornerRadius;
self.clipsToBounds = true
}
}
}
我认为这是简单的形式
Button1.layer.cornerRadius = 10(Half of the length and width)
Button1.layer.borderWidth = 2
使用button.layer。cornerRadius, button.layer.borderColor和button.layer.borderWidth。 注意borderColor需要CGColor,所以你可以说(Swift 3/4):
button.backgroundColor = .clear
button.layer.cornerRadius = 5
button.layer.borderWidth = 1
button.layer.borderColor = UIColor.black.cgColor
我已经创建了一个简单的UIButton子模块,它使用tintColor作为文本和边框颜色,当高亮显示时,它的背景改变为tintColor。
class BorderedButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
layer.borderWidth = 1.0
layer.borderColor = tintColor.CGColor
layer.cornerRadius = 5.0
clipsToBounds = true
contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
setTitleColor(tintColor, forState: .Normal)
setTitleColor(UIColor.whiteColor(), forState: .Highlighted)
setBackgroundImage(UIImage(color: tintColor), forState: .Highlighted)
}
}
这利用了一个UIImage扩展,从一个颜色创建一个图像,我发现代码在这里:https://stackoverflow.com/a/33675160
当在界面构建器中设置为自定义类型时,它工作得最好,因为默认的系统类型会在按钮突出显示时略微修改颜色。
要在故事板中完成这项工作(接口构建器检查器)
在IBDesignable的帮助下,我们可以为UIButton添加更多的界面构建器检查器选项,并在故事板上调整它们。首先,将以下代码添加到项目中。
@IBDesignable extension UIButton {
@IBInspectable var borderWidth: CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat {
set {
layer.cornerRadius = newValue
}
get {
return layer.cornerRadius
}
}
@IBInspectable var borderColor: UIColor? {
set {
guard let uiColor = newValue else { return }
layer.borderColor = uiColor.cgColor
}
get {
guard let color = layer.borderColor else { return nil }
return UIColor(cgColor: color)
}
}
}
然后简单地设置storyboard上按钮的属性。
推荐文章
- 如何使用@Binding变量实现自定义初始化
- Swift设置为Array
- 如何设置回退按钮文本在Swift
- 我如何能在Swift扩展类型化数组?
- Swift类错误:属性未在super处初始化。init调用
- Swift to Objective-C头未在Xcode 6中创建
- 在Swift中将字典转换为JSON
- 我如何模仿地图应用程序的底部表格?
- 改变导航栏后退按钮的颜色
- Swift是否支持文档生成?
- 如何复制文本到剪贴板/剪贴板与Swift
- 如何在Swift中返回数组的前5个对象?
- 在Swift中以编程方式返回到以前的ViewController
- 按下UINavigationController后栏按钮时执行动作
- 如何隐藏键盘在迅速按下返回键?