UITextField使用故事板设置边框颜色

时间:2014-10-06 17:57:38

标签: ios storyboard uitextfield

如果可能,我想使用故事板设置边框颜色。我在这里看到了答案:UITextField border color

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

设置了所有属性,但TextField不显示边框。有什么建议吗?

6 个答案:

答案 0 :(得分:12)

正如Bogdan指出的那样,你可以通过简单的子类化和几位代码来做到这一点。之后,一切都将在故事板中编辑。

  1. 子类UITextField
  2. 创建两个属性,一个用于边框宽度,另一个用于边框颜色
  3. 使这些变量IBInspectable和整个类IBDesignable
  4. 您可以更改边框的颜色和宽度,并实时查看更改。
  5. 插图代码(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
            }
        }
    }
    

    修改:您将在属性检查器

    中看到此信息

    Attributes Inspector

答案 1 :(得分:7)

正如波格丹指出的那样,你无法在故事板中找到layer.borderColor属性,因为它是一个运行时的东西。

然而,你仍然可以在任何视图(或UIView Subclass)上使用IB_DESIGNABLE设置 borderColor 并进行一些编码。

以下是如何实现它的步骤,

  1. 在CALayer类上创建一个类别。使用合适的名称声明类型为 UIColor 的属性,我将其命名为 borderUIColor
  2. 为此属性编写setter和getter。
  3. 在“塞特”中方法只需设置" borderColor"层的属性为新颜色CGColor值。
  4. 在Getter'方法使用图层的borderColor返回UIColor。
  5. 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,按照其余步骤进行操作;

    1. 单击要为其设置边框颜色的View对象。
    2. 点击&#34; Identity Inspector&#34;(左起第3位)&#34; Utility&#34;(屏幕右侧)面板。
    3. 在&#34;用户定义的运行时属性&#34;下,单击&#34; +&#34;按钮添加关键路径。
    4. 将键路径的类型设置为&#34; Color&#34;。
    5. 输入关键路径的值为&#34; layer.borderUIColor&#34;。 [请记住,这应该是您在类别中声明的变量名称,而不是 borderColor ,此处 borderUIColor ]。
    6. 最后选择你想要的任何颜色。
    7. 修改:您必须将 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
    }
 }
}