在Storyboard中为UIButton设置边框

Tom*_*las 25 objective-c storyboard uibutton ios swift

我不能在XCode 5中的按钮上设置边框而不直接在代码中设置它们.如果没有制作自定义背景图片,是否有可能在故事板上无法做到这一点?

Gui*_*tro 72

您可以使用密钥路径.

例如layer.cornerRadius,在图像上描述的角半径(). 您将无法在故事板上看到效果,因为此参数在运行时进行评估.现在,您可以在UIView中使用swift类别(图片中的代码)@IBInspectable以在故事板中显示结果(如果您使用的是类别,则仅使用cornerRadius而不是layer.cornerRadius作为关键路径.

在此输入图像描述


extension UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是Peter DeWeese的答案,允许使用keypath layer.borderUIColor设置边框颜色.

CALayer的+ XibConfiguration.h:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end
Run Code Online (Sandbox Code Playgroud)

CALayer的+ XibConfiguration.m:

#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 你每天都学到新的东西..这对很久以前的人来说很有用啊. (3认同)
  • 顺便说一句,我还必须为要显示的边框设置`layer.borderWidth`. (3认同)
  • 哇,真是太酷了!我不知道这个隐藏的宝石!Upvoted. (2认同)

dch*_*rov 7

Swift 3 如果你想在使用IBInspectable时在IB中看到结果,你必须扩展UIView并将属性添加到该类,即

@IBDesignable class MyView: UIView {}

extension MyView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderColor: UIColor {
        get {
            return UIColor.init(cgColor: layer.borderColor!)
        }
        set {
            layer.borderColor = newValue.cgColor
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

参考:http://nshipster.com/ibinspectable-ibdesignable/