【问题标题】:UITextField border colorUITextField 边框颜色
【发布时间】:2010-12-24 02:36:36
【问题描述】:

我非常希望将我自己的颜色设置为 UITextField 边框。但到目前为止,我只能找到如何更改边框线样式。

我已经使用背景属性以这种方式设置背景颜色:

self.textField.backgroundColor = textFieldColor;

但我也必须更改 UITextField 边框的颜色。我的问题是关于如何更改边框颜色。

【问题讨论】:

  • 很多有用的答案,但只有一个 (stackoverflow.com/a/5387607/826946) 提到了我发现的关键:textField.borderStyle = UITextField.BorderStyle.none。没有它,我会得到内置边框的痕迹。似乎一旦您不使用内置边框并开始定义自己的边框,您需要使用borderStyle = none 说您不想要它,然后定义所有参数(颜色、cornerRadius 和borderWidth)

标签: ios colors uikit uitextfield border


【解决方案1】:

在你的类中导入QuartzCore 框架:

#import <QuartzCore/QuartzCore.h>

要更改边框颜色,请使用以下代码 sn-p(我将其设置为 redColor),

    textField.layer.cornerRadius=8.0f;
    textField.layer.masksToBounds=YES;
    textField.layer.borderColor=[[UIColor redColor]CGColor];
    textField.layer.borderWidth= 1.0f;

要恢复到原始布局,只需将边框颜色设置为清除颜色,

    serverField.layer.borderColor=[[UIColor clearColor]CGColor];

在快速代码中

    textField.layer.borderWidth = 1
    textField.layer.borderColor = UIColor.whiteColor().CGColor

【讨论】:

  • 这是 #import 而不是 QuartCore(你忘了 z)
  • iOS 7 必须设置边框宽度,否则颜色不生效。
  • 作为初学者,这对我来说毫无意义。如果我启动一个空白的空应用程序,请转到情节提要并添加一个 TextView 字段。我在哪里导入quartzcore?我在哪里添加上面的边框宽度信息?什么是“textField”,它如何知道我说的是哪个文本字段?
  • @Sephethus 如果您还没有弄清楚,这就是您必须做的事情:您必须“连接”您在情节提要中创建的文本字段并以编程方式更改这些属性乙>。连接故事板后,进入代码(例如在viewDidLoad 中)并通过说self.myTextField.layer.cornerRadius 等更改这些属性。这些更改将在您启动应用程序后立即生效,但您看不到故事板中的变化。如果这对您没有任何意义,我建议您访问一个网站,例如 Ray Wenderlich,并阅读一些初学者 tuts。
  • @NathanMcKaskle “我在哪里导入quartzcore?”你将它添加到你的ViewController.h文件的顶部。 “什么是“textField”,它如何知道我说的是哪个文本字段?” 您可以创建一个“本地”文本字段 IBOutlet var 并将其连接到您的 TextField(不是 TextView)'我刚刚放上情节提要。有关更多信息,请查看此处:hubpages.com/technology/… “我在哪里添加上面的边框宽度信息?” 任何地方,但最好是在 viewDidLoad 函数中。
【解决方案2】:

试试这个:

UITextField *theTextFiels=[[UITextField alloc]initWithFrame:CGRectMake(40, 40, 150, 30)];
    theTextFiels.borderStyle=UITextBorderStyleNone;
    theTextFiels.layer.cornerRadius=8.0f;
    theTextFiels.layer.masksToBounds=YES;
        theTextFiels.backgroundColor=[UIColor redColor];
    theTextFiels.layer.borderColor=[[UIColor blackColor]CGColor];
    theTextFiels.layer.borderWidth= 1.0f;

    [self.view addSubview:theTextFiels];
    [theTextFiels release];

并导入 QuartzCore:

#import <QuartzCore/QuartzCore.h>

【讨论】:

    【解决方案3】:

    导入以下类:

    #import <QuartzCore/QuartzCore.h> 
    

    //设置文本框边框灰色的代码

    [[textField layer] setBorderColor:[[UIColor colorWithRed:171.0/255.0
                                                       green:171.0/255.0
                                                        blue:171.0/255.0
                                                       alpha:1.0] CGColor]];
    

    根据需要将171.0替换为相应的颜色编号。

    【讨论】:

      【解决方案4】:

      这个问题在 Google 搜索中的排名很高,并且大部分都有效!我确实发现 Salman Zaidi 的回答对于 iOS 7 是部分正确的。

      您需要对“还原”代码进行修改。我发现以下恢复工作完美:

      textField.layer.cornerRadius = 0.0f;
      textField.layer.masksToBounds = YES;
      textField.layer.borderColor = [[UIColor blackColor] CGColor];
      textField.layer.borderWidth = 0.0f;
      

      我知道这很可能是由于 iOS 7 的变化。

      【讨论】:

        【解决方案5】:

        Swift 5.0 更新

        textField.layer.masksToBounds = true
        textField.layer.borderColor = UIColor.blue.cgColor
        textField.layer.borderWidth = 1.0
        

        【讨论】:

          【解决方案6】:

          要从接受的答案简化此操作,您还可以为 UIView 创建 Category(因为这适用于 UIView 的所有子类,不仅适用于文本字段:

          UIView+Additions.h:

          #import <Foundation/Foundation.h>
          
          @interface UIView (Additions)
          - (void)setBorderForColor:(UIColor *)color 
                              width:(float)width 
                             radius:(float)radius;
          @end
          

          UIView+Additions.m:

          #import "UIView+Additions.h"
          
          @implementation UIView (Additions)
          
          - (void)setBorderForColor:(UIColor *)color 
                              width:(float)width
                             radius:(float)radius
          {
              self.layer.cornerRadius = radius;
              self.layer.masksToBounds = YES;
              self.layer.borderColor = [color CGColor];
              self.layer.borderWidth = width;
          }
          
          @end
          

          用法:

          #import "UIView+Additions.h"
          //...
          [textField setBorderForColor:[UIColor redColor]
                                 width:1.0f
                                radius:8.0f];
          

          【讨论】:

            【解决方案7】:

            如果您使用带圆角的 TextField,请使用以下代码:

                self.TextField.layer.cornerRadius=8.0f;
                self.TextField.layer.masksToBounds=YES;
                self.TextField.layer.borderColor=[[UIColor redColor]CGColor];
                self.TextField.layer.borderWidth= 1.0f;
            

            移除边框:

            self.TextField.layer.masksToBounds=NO;
            self.TextField.layer.borderColor=[[UIColor clearColor]CGColor];
            

            【讨论】:

              【解决方案8】:
              任何视图(或 UIView 子类)上的

              borderColor 也可以使用带有一点编码的情节提要进行设置,如果您在多个 UI 对象上设置边框颜色,这种方法可能非常方便。

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

              1. 在 CALayer 类上创建一个类别。用一个合适的名字声明一个 UIColor 类型的属性,我将它命名为 borderUIColor
              2. 为此属性编写 setter 和 getter。
              3. 在“Setter”方法中,只需将图层的“borderColor”属性设置为新的颜色 CGColor 值。
              4. 在“Getter”方法中返回 UIColor 和图层的边框颜色。

              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 2.0:

              extension CALayer {
              var borderUIColor: UIColor {
                  set {
                      self.borderColor = newValue.CGColor
                  }
              
                  get {
                      return UIColor(CGColor: self.borderColor!)
                  }
              }
              }
              

              最后转到您的故事板/XIB,按照其余步骤操作;

              1. 单击要为其设置边框颜色的视图对象。
              2. 点击“实用工具”(屏幕右侧)面板中的“身份检查器”(左起第三个)。
              3. 在“用户定义的运行时属性”下,单击“+”按钮添加关键路径。
              4. 将键路径的类型设置为“颜色”。
              5. 将关键路径的值输入为“layer.borderUIColor”。 [记住这应该是您在类别中声明的变量名,而不是borderColor,这里是borderUIColor]。
              6. 最后选择了你想要的颜色。

              您必须将 layer.borderWidth 属性值设置为至少 1 才能看到边框颜色。

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

              【讨论】:

              • 请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答
              【解决方案9】:
              extension UIView {
                  func addBorder(_ width: CGFloat = 1, color: UIColor = .black, cornerRadius: CGFloat = 4) {
                      layer.borderWidth = width
                      layer.borderColor = color.cgColor
                      layer.cornerRadius = cornerRadius
                  }
              }
              

              这样称呼: email.addBorder(1.0, color: .blue, cornerRadius: 5).

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-11-15
                相关资源
                最近更新 更多