Установите ширину и цвет границы слоя 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 также может изменять цвета текста и так много.

Счастливое кодирование