Я хотел бы установить цвет границы, используя раскадровку, если это возможно. Я видел ответ здесь: UITextField цвет границы
И я последовал ответ в раскадровке:
Все свойства установлены, но TextField не показывает границы. Какие-либо предложения?
Я хотел бы установить цвет границы, используя раскадровку, если это возможно. Я видел ответ здесь: UITextField цвет границы
И я последовал ответ в раскадровке:
Все свойства установлены, но TextField не показывает границы. Какие-либо предложения?
Хорошо, как отметил Богдан, вы могли бы сделать это с помощью простого подкласса и всего лишь нескольких кусков кода. После этого все будет редактироваться в раскадровке.
Код для иллюстрации (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
}
}
}
Изменение: вы увидите это в вашем инспекторе атрибутов
Как сказал Богдан, это правда, что вы не можете найти свойство layer.borderColor в раскадровке, поскольку это время выполнения.
Однако вы можете установить borderColor без использования IB_DESIGNABLE на любом представлении (или подклассе UIView) с небольшим количеством кодировок.
Ниже приведены шаги по его достижению,
P.S: Помните, что категории не могут храниться в свойствах. 'borderUIColor' используется как вычисленное свойство, как ссылка для достижения того, на что мы фокусируемся.
Пожалуйста, ознакомьтесь с приведенным ниже примером кода;
Цель C:
Файл интерфейса:
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface CALayer (BorderProperties)
// This assigns a CGColor to borderColor.
@property (nonatomic, assign) UIColor* borderUIColor;
@end
Файл реализации:
#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!)
}
}
}
И, наконец, перейдите в свою раскадровку /XIB, следуйте оставшимся шагам;
Изменить: вы должны установить значение свойства layer.borderWidth как минимум 1, чтобы увидеть цвет рамки.
Построить и запустить. Счастливое кодирование.:)
Я не уверен, что вы можете изменить цвет границы поля UIText в раскадровке. Вы можете программно изменить его с помощью следующих строк:
UITextField *myTextField = (UITextField *)[self.view viewWithTag:1];
myTextField.borderStyle = UITextBorderStyleLine;
myTextField.layer.borderWidth = 2;
myTextField.layer.borderColor = [[UIColor redColor] CGColor];
Надеюсь, что это поможет.
Он не отображает границу из-за свойства layer.borderColor
. Это атрибуты типа CGColor и Runtime пока не поддерживают это по умолчанию, поэтому, устанавливая только один атрибут неправильно, также отключает другие.
Чтобы сделать это из раскадровки, но также с использованием некоторого кода и подкласса, вы можете использовать этот метод:
Подкласс UITextField и создайте свойство
IB_DESIGNABLE
UIColor, которое затем преобразуется в CGColor и примените его кself.layer.borderColor
.
Это вариант над ответом @rameswar, который я считаю правильным. Поскольку мы применяем UIColor
, я думаю, предпочтительнее написать расширение для UITextField
вместо этого (UI
вещи вместе):
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
}
}
}
}
Свойство runtime будет тогда borderColor
(поэтому вам не нужно вводить layer.
, и я думаю, что он немного чище, чем borderUIColor
).
borderColor
CALayer
не является обязательным, поэтому это свойство. Он становится черным при установке nil
И, наконец, layer.borderWidth
он установил минимальное значение 1.0, потому что цвет не установлен иначе.
Помимо маркуса, поставьте полный код:
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
}
}
}