2014-10-06 90 views
10

如果可能,我想使用故事板设置边框颜色。我见过的答案在这里:UITextField border colorUITextField使用故事板设置边框颜色

我跟着回答故事板: enter image description here

所有属性设置,但文本字段不显示边框。有什么建议么?

+0

你可以看到【如何在故事板中添加边框](http://stackoverflow.com/questions/12301256/is-it-possible-to-set-uiview-border-properties-from-interface-builder/ 30348021#30348021) – iHulk 2015-05-20 11:10:41

回答

2

我不确定你可以在故事板中更改UITextfield的边框颜色。你可以通过编程方式改变它;

UITextField *myTextField = (UITextField *)[self.view viewWithTag:1]; 
myTextField.borderStyle = UITextBorderStyleLine; 
myTextField.layer.borderWidth = 2; 
myTextField.layer.borderColor = [[UIColor redColor] CGColor]; 

希望这会有所帮助。

+0

@katit - 是否有任何帮助,或者您是否找到了在故事板中执行此操作的方法? – Gismay 2014-10-09 11:22:26

0

由于layer.borderColor属性,它不显示任何边框。它是CGColor类型的,运行时属性在默认情况下还不支持,所以只设置一个属性错误,也会禁用其他属性。

要从故事板做,但也涉及一些代码和子类,你可以使用这个方法:

子类的UITextField并作出IB_DESIGNABLE的UIColor属性,你会再变成CGColor并应用到self.layer.borderColor

7

正如Bogdan指出的那样,在故事板中找不到layer.borderColor属性是因为它是运行时的事情。

但是,你仍然可以设置borderColor不使用IB_DESIGNABLE,在任何视图(或UIView子类)与一点点的编码。

下面的步骤是如何实现的,

  1. 创建上的CALayer类的类别。声明类型的UIColor用合适的名称的属性,我将其命名为borderUIColor
  2. 为此属性编写setter和getter。
  3. 在'Setter'方法中,只需将图层的“borderColor”属性设置为新颜色CGColor值即可。
  4. 在'Getter'方法返回UIColor与图层的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 

夫特3.1:

extension CALayer { 
    var borderUIColor: UIColor { 
     set { 
      self.borderColor = newValue.cgColor 
     } 

     get { 
      return UIColor(cgColor: self.borderColor!) 
     } 
    } 
} 

最后去你的故事板/ XIB,按照其余的步骤;

  • 单击您要设置边框颜色视图对象。
  • 在“Utility”(屏幕右侧)面板上点击“Identity Inspector”(左起第3个)。
  • 在“用户定义的运行时属性”下,单击“+”按钮添加关键路径。
  • 将关键路径的类型设置为“Color”。
  • 输入关键路径的值为“layer.borderUIColor”。 [请记住这应该是变量名称你在类别中声明,而不是borderColor这里它是borderUIColor]。
  • 最后选择你想要的任何颜色。
  • 编辑:您必须设置layer.borderWidth属性值至少为1以查看边框颜色。

    构建和运行。 快乐编码。 :)

    +0

    对于** Swift 3 **,您只需在** Swift 2 **版本中用'cgColor'替换'CGColor'的所有实例。 – CAD97 2017-05-06 18:39:37

    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更清洁)。

    CALayerborderColor是可选的,所以它是属性。它设置为黑色时nil

    最后,layer.borderWidth它被设置为最低1.0,因为它没有设置其他颜色。

    3

    那么Bogdan指出,你可以做到这一点,只需简单的子类和只是几个代码。之后,所有内容都将在Storyboard中进行编辑。

    1. 子类的UITextField
    2. 创建两个属性,一个是边框的宽度,一个用于边框颜色
    3. 让这些变量IBInspectable和全班IBDesignable
    4. 你就可以改变边框的颜色和宽度并实时查看变化。

    代码说明(雨燕3.1):

    @IBDesignable 
    class FormTextField: UITextField { 
    
        @IBInspectable var borderColor: UIColor? { 
         didSet { 
          layer.borderColor = borderColor?.cgColor 
         } 
        } 
    
        @IBInspectable var borderWidth: CGFloat = 0 { 
         didSet { 
          layer.borderWidth = borderWidth 
         } 
        } 
    } 
    

    编辑:您将在看到这个属性检查器

    Attributes Inspector

    相关问题