Установите ширину и цвет границы слоя UIButton в построителе интерфейса
Могу ли я использовать IB_DESIGNABLE и/или IBInspectable для установки layer.borderWidth и layer.borderColor в Interface Builder? В настоящее время я создаю свою кнопку в коде, но я бы хотел установить все это в IB, но я не уверен, что эти свойства могут быть установлены таким образом в Xcode 6. Я хотел бы сделать это IBOutlet вместо того, чтобы все это задано в коде. Вот мой код кнопки сейчас.
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];
![xCVgh.png]()
Я устанавливаю эти значения как предложено, и граница никогда не отображается в симуляторе.
EDIT: Я узнал, почему граница не показывалась при установке этих значений в IB. Цвет границы - это CGColor, поэтому мне пришлось установить его в коде.
![Rfock.png]()
Ответы
Ответ 1
На самом деле вы можете установить некоторые свойства слоя вида через построитель интерфейса. Я знаю, что я могу установить границу borderWidth и cornerRadius через xcode. borderColor не работает, возможно потому, что для слоя требуется CGColor вместо UIColor.
Возможно, вам придется использовать строки вместо чисел, но это работает!
![enter image description here]()
Но вы можете использовать категории для прокси-свойств, таких как layer.borderColor. (Из 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]()
Результат будет очевидным во время выполнения, а не в Xcode.
Ответ 2
Вы можете установить большинство из них в построителе интерфейса, добавляя атрибуты времени выполнения к элементам:
![enter image description here]()
Для layer.borderWidth = 2.0f; будет:
Выберите кнопку и добавьте новый атрибут
keypath: layer.borderWidth
type: Number
Значение 2
Эти изменения не будут видны внутри построителя интерфейса, только во время выполнения
Ответ 3
да, можно
в правой части нажмите на инспектор удостоверений личности, u найдет это
![enter image description here]()
нажмите +
в User Defined Runtime Attributes
выберите keypath
и отредактируйте его
напишите код, подобный этому
layer.cornerRadius
и в Type
измените тип на number
и установите требуемое значение ur, подобное этому
![]()
u также может изменять цвета текста и так много.
Счастливое кодирование