如果可能的话,我希望能够使用Storyboard设置边框颜色。我在这里看到了答案:UITextField border color
并且我按照答案在Storyboard中进行了设置:
所有属性都已设置,但TextField并未显示边框。有什么建议吗?
如果可能的话,我希望能够使用Storyboard设置边框颜色。我在这里看到了答案:UITextField border color
并且我按照答案在Storyboard中进行了设置:
所有属性都已设置,但TextField并未显示边框。有什么建议吗?
正如Bogdan所指出的,您可以通过简单的子类化和只需少量代码来实现这一点。之后,所有内容都可以在Storyboard中进行编辑。
说明代码(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
}
}
}
编辑:您将在属性检查器中看到此内容
#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!)
}
}
}
编辑:你必须将layer.borderWidth属性的值至少设置为1才能看到边框颜色。
构建并运行。 愉快的编码。 :)
CGColor
实例替换为 cgColor
即可。 - CAD97import UIKit //IMPORTANT
@IBDesignable
class BorderTextField: UITextField {
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
}
我不确定您是否可以在Storyboard中更改UITextfield的边框颜色。您可以通过以下方式以编程方式更改它:
UITextField *myTextField = (UITextField *)[self.view viewWithTag:1];
myTextField.borderStyle = UITextBorderStyleLine;
myTextField.layer.borderWidth = 2;
myTextField.layer.borderColor = [[UIColor redColor] CGColor];
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
更清晰)。
CALayer
的 borderColor
是可选的,因此它是该属性。当设置为 nil
时,它变为黑色。layer.borderWidth
设置为最小值 1.0,因为否则颜色未设置。由于 layer.borderColor
属性的缘故,它不显示任何边框。它是 CGColor 类型,运行时属性默认不支持它,因此,设置一个属性错误将禁用其他属性。
从 storyboard 中完成它,还涉及一些代码和子类化,您可以使用此方法:
子类化 UITextField 并制作一个
IB_DESIGNABLE
UIColor 属性,然后将其转换为 CGColor 并应用于self.layer.borderColor
。