J'aimerais définir la couleur de la bordure à l'aide du storyboard, si possible. J'ai vu répondre ici: UITextField border color
Et j'ai suivi la réponse dans le storyboard:
Toutes les propriétés sont définies, mais TextField n’affiche pas de bordure. Aucune suggestion?
Comme l'a souligné Bogdan , vous pouvez très bien le faire avec des sous-classes simples et quelques bits de code. Après cela, tout sera éditable dans les Storyboards.
Code pour illustration (Swift 3.1):
@IBDesignable
class FormTextField: UITextField {
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
}
Edit: vous verrez ceci dans votre inspecteur Attributes
Comme Bogdan l'a souligné, il est vrai que vous ne pouvez pas trouver la propriété layer.borderColor dans le storyboard, car il s'agit d'une opération d'exécution.
Cependant, vous pouvez toujours définir borderColor sans utiliser IB_DESIGNABLE, dans n’importe quelle vue (ou sous-classe UIView) avec un peu de codage.
Voici les étapes à suivre pour y parvenir,
P.S: N'oubliez pas que les catégories ne peuvent pas avoir de propriétés stockées. 'borderUIColor' est utilisé comme propriété calculée, juste comme référence pour réaliser ce sur quoi nous nous concentrons.
S'il vous plaît jeter un oeil à l'exemple de code ci-dessous;
Objectif c:
Fichier d'interface:
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface CALayer (BorderProperties)
// This assigns a CGColor to borderColor.
@property (nonatomic, assign) UIColor* borderUIColor;
@end
Fichier d'implémentation:
#import "CALayer+BorderProperties.h"
@implementation CALayer (BorderProperties)
- (void)setBorderUIColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
- (UIColor *)borderUIColor {
return [UIColor colorWithCGColor:self.borderColor];
}
@end
Swift 3.1:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
}
Et enfin, allez sur votre storyboard/XIB, suivez les étapes restantes;
Modifier: vous devez définir la valeur de la propriété layer.borderWidth sur au moins 1 pour afficher la couleur de la bordure.
Construire et exécuter . Happy Coding. :)
Je ne suis pas sûr que vous puissiez changer la couleur de la bordure d'un UITextfield dans le storyboard. Vous pouvez le changer par programme avec quelque chose comme:
UITextField *myTextField = (UITextField *)[self.view viewWithTag:1];
myTextField.borderStyle = UITextBorderStyleLine;
myTextField.layer.borderWidth = 2;
myTextField.layer.borderColor = [[UIColor redColor] CGColor];
J'espère que cela t'aides.
Ajout à markus, mettez le code complet:
import UIKit //IMPORTANT
@IBDesignable
class BorderTextField: UITextField {
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
}
Ceci est une variante de la réponse @rameswar qui, je pense, est correcte. Comme nous appliquons une UIColor
, je pense qu'il est préférable d'écrire une extension pour la UITextField
à la place (UI
choses ensemble):
extension UITextField {
var borderColor : UIColor? {
get {
if let cgcolor = layer.borderColor {
return UIColor(CGColor: cgcolor)
} else {
return nil
}
}
set {
layer.borderColor = newValue?.CGColor
// width must be at least 1.0
if layer.borderWidth < 1.0 {
layer.borderWidth = 1.0
}
}
}
}
La propriété d'exécution serait alors borderColor
(vous n'avez donc pas besoin de taper layer.
et je pense que c'est un peu plus propre que borderUIColor
).
La borderColor
de CALayer
est optionnelle, donc c'est cette propriété. Il devient noir lorsqu'il est défini sur nil
Et finalement, le layer.borderWidth
est défini sur un minimum de 1,0 car la couleur n’est pas définie autrement.
Il n'affiche aucune bordure à cause de la propriété layer.borderColor
. Ses attributs de type CGColor et Runtime ne le supportent pas encore par défaut. Désactiver un seul attribut désactive également les autres.
Pour le faire à partir du storyboard, mais aussi du code et des sous-classes, vous pouvez utiliser cette méthode:
Sous-classe UITextField et créez une propriété
IB_DESIGNABLE
UIColor que vous transformerez ensuite en CGColor pour l'appliquer àself.layer.borderColor
.