答案 0 :(得分:12)
正如Bogdan指出的那样,你可以通过简单的子类化和几位代码来做到这一点。之后,一切都将在故事板中编辑。
插图代码(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
}
}
}
修改:您将在属性检查器
中看到此信息答案 1 :(得分:7)
正如波格丹指出的那样,你无法在故事板中找到layer.borderColor属性,因为它是一个运行时的东西。
然而,你仍然可以在任何视图(或UIView Subclass)上使用IB_DESIGNABLE设置 borderColor 并进行一些编码。
以下是如何实现它的步骤,
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才能看到边框颜色。
构建并运行。 快乐的编码。 :)
答案 2 :(得分:3)
我不确定您是否可以在故事板中更改UITextfield的边框颜色。您可以使用以下内容以编程方式更改它;
UITextField *myTextField = (UITextField *)[self.view viewWithTag:1];
myTextField.borderStyle = UITextBorderStyleLine;
myTextField.layer.borderWidth = 2;
myTextField.layer.borderColor = [[UIColor redColor] CGColor];
希望这有帮助。
答案 3 :(得分:0)
由于layer.borderColor
属性,它没有显示任何边框。它的类型为CGColor,默认情况下运行时属性尚不支持,因此,只设置一个属性错误,也会禁用其他属性。
要从故事板中执行此操作但还涉及一些代码和子类,您可以使用此方法:
UITextField子类并创建一个
IB_DESIGNABLE
UIColor属性,然后将其转换为CGColor并将其应用于self.layer.borderColor
。
答案 4 :(得分:0)
这是@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
}
}
}
}
运行时属性将是borderColor
(因此您不需要键入layer.
,我认为它比borderUIColor
更清晰。
borderColor
的{{1}}是可选的,因此它就是这个属性。设置为CALayer
最后,nil
它被设置为最小值1.0,因为它没有设置颜色。
答案 5 :(得分: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
}
}
}