web-dev-qa-db-fra.com

Définir la largeur et la couleur de la bordure de la couche UIButton dans Interface Builder

Puis-je utiliser IB_DESIGNABLE et/ou IBInspectable pour définir layer.borderWidth et layer.borderColor dans Interface Builder? Je suis en train de créer mon bouton dans le code mais j'aimerais pouvoir définir tout cela dans IB mais je ne suis pas sûr si ces propriétés peuvent être définies de cette façon dans Xcode 6. J'aimerais en faire un IBOutlet au lieu d'avoir tout cela dans le code. Voici mon code de bouton maintenant.

directions = [UIButton buttonWithType:UIButtonTypeRoundedRect];
directions.titleLabel.textAlignment = NSTextAlignmentCenter;
directions.titleLabel.font = [UIFont fontWithName:@"FranklinGothicStd-ExtraCond" size:20.0];
[directions setTitle:@"Directions" forState:UIControlStateNormal];
[directions setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
directions.frame = CGRectMake(20, 178, 70, 70);
directions.layer.borderWidth = 2.0f;
directions.layer.borderColor = [UIColor whiteColor].CGColor;
directions.clipsToBounds = YES;
directions.backgroundColor = [UIColor clearColor];
[directions addTarget:self action:@selector(getDirections:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:directions];

J'ai défini ces valeurs comme suggéré et la bordure n'est jamais affichée dans le simulateur. EDIT: J'ai découvert pourquoi la frontière n'apparaissait pas lors de la définition de ces valeurs dans IB. La couleur de la bordure est un CGColor, j'ai donc dû le définir dans le code.

17
raginggoat

En fait, vous pouvez définir certaines propriétés du calque d'une vue via le générateur d'interface. Je sais que je peux définir borderWidth et cornerRadius d'une couche via xcode. borderColor ne fonctionne pas, probablement parce que le calque veut un CGColor au lieu d'un UIColor.

Vous devrez peut-être utiliser des chaînes au lieu de chiffres, mais cela fonctionne!

enter image description here

Mais vous pouvez utiliser des catégories pour proxy des propriétés telles que layer.borderColor. (À partir de ConventionalC CocoaPod)

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

Interface Builder

Le résultat sera visible pendant l'exécution, pas dans Xcode.

31
Baig

Vous pouvez définir la plupart de ceux dans le générateur d'interface en ajoutant des attributs d'exécution aux éléments: enter image description here

Pour layer.borderWidth = 2.0f; serait:

Sélectionnez le bouton et ajoutez un nouvel attribut

keypath: layer.borderWidth

type: Nombre Valeur 2

Ces modifications ne seront pas visibles dans le générateur d'interface, uniquement lors de l'exécution

5
Istvan

oui tu peux dans le côté droit cliquer sur inspecteur d'identité, tu trouveras comme ça enter image description here

cliquez sur + dans User Defined Runtime Attributes

sélectionnez keypath et modifiez-le

écrire le code comme ça

layer.cornerRadius et dans Type changez le type en number et définissez la valeur requise comme ceci

u peut également changer les couleurs du texte et tant d'autres.

Codage heureux

5
sreekanthk