web-dev-qa-db-fra.com

Définir une frontière pour UIButton dans Storyboard

Je ne peux pas obtenir de bordure sur mes boutons dans XCode 5 sans les définir directement dans le code. Est-il possible qu'il n'y ait aucun moyen de le faire sur le storyboard sans créer une image d'arrière-plan personnalisée?

25
Tommy Nicholas

Vous pouvez utiliser le chemin d'accès aux clés.

Par exemple, le rayon d'angle (layer.cornerRadius) comme décrit sur l'image. Vous ne pourrez pas voir les effets sur le storyboard, car ces paramètres sont évalués au moment de l'exécution. Vous pouvez maintenant utiliser une catégorie Swift dans UIView (code sous l'image) avec @IBInspectable pour afficher le résultat dans le storyboard (si vous utilisez la catégorie, utilisez uniquement cornerRadius et non layer.cornerRadius comme chemin d'accès clé.

enter image description here


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

Voici la catégorie de Peter DeWeese réponse qui autorise l'utilisation de keypath layer.borderUIColor pour définir la couleur de la bordure.

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

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
72

Swift 3 Si vous voulez voir le résultat dans IB lorsque vous utilisez IBInspectable, vous devez étendre UIView et ajouter les propriétés à cette classe, c'est-à-dire.

@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
        }
    }
}

référence: http://nshipster.com/ibinspectable-ibdesignable/

7
dchakarov

Réponse courte:

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

Réponse longue:

Coins arrondis UIButton

customUIView.layer.cornerRadius = 10

Épaisseur de bordure

pcustomUIView.layer.borderWidth = 1

Couleur de la bordure

customUIView.layer.borderColor = UIColor.blue.cgColor
0
swiftBoy