สีเส้นขอบ UITextField


133

ฉันมีความปรารถนาดีมากที่จะตั้งค่าสีของตัวเองเป็นเส้นขอบ UITextField แต่จนถึงตอนนี้ฉันสามารถหาวิธีเปลี่ยนรูปแบบเส้นขอบได้เท่านั้น

ฉันใช้คุณสมบัติพื้นหลังเพื่อกำหนดสีพื้นหลังด้วยวิธีดังกล่าว:

self.textField.backgroundColor = textFieldColor;

แต่ฉันต้องเปลี่ยนสีของเส้นขอบ UITextField ด้วย และคำถามของฉันคือวิธีเปลี่ยนสีเส้นขอบ


คำตอบที่เป็นประโยชน์มากมาย แต่มีเพียงคำตอบเดียว ( stackoverflow.com/a/5387607/826946 ) ที่พูดถึงสิ่งที่ฉันพบคีย์: textField.borderStyle = UITextField.BorderStyle.none โดยที่ฉันไม่ได้รับร่องรอยของเส้นขอบในตัว ดูเหมือนว่าเมื่อคุณไม่ได้ใช้เส้นขอบในตัวและเริ่มกำหนดเส้นขอบของคุณเองคุณต้องบอกว่าคุณไม่ต้องการใช้ borderStyle = none จากนั้นกำหนดพารามิเตอร์ทั้งหมด (color, cornerRadius และ borderWidth)
Andy Weinstein

คำตอบ:


274

นำเข้าQuartzCoreกรอบในชั้นเรียนของคุณ:

#import <QuartzCore/QuartzCore.h>

และสำหรับการเปลี่ยนสีเส้นขอบให้ใช้ข้อมูลโค้ดต่อไปนี้ (ฉันตั้งค่าเป็นสีแดง)

    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

3
เป็น #import <QuartzCore / QuartzCore.h> แทน QuartCore (คุณลืม z)
cldrr

55
ใน iOS 7 คุณต้องตั้งค่าความกว้างของเส้นขอบมิฉะนั้นสีจะไม่มีผล
คาห์

1
ในฐานะผู้เริ่มต้นสิ่งนี้ไม่สมเหตุสมผลสำหรับฉัน ถ้าฉันเริ่มแอปที่ว่างเปล่าให้ไปที่กระดานเรื่องราวและเพิ่มช่อง TextView ฉันจะนำเข้าควอตซ์คอร์ได้ที่ไหน ฉันจะเพิ่มข้อมูลแบนด์วิธด้านบนได้ที่ไหน "textField" คืออะไรและจะรู้ได้อย่างไรว่าฉันกำลังพูดถึงช่องข้อความใด
Nathan McKaskle

1
@Sephethus ถ้าคุณยังไม่ได้คิดออกยังเป็นสิ่งที่คุณต้องทำ: คุณ gotta "เบ็ดขึ้น" ฟิลด์ข้อความที่คุณสร้างขึ้นในสตอรี่บอร์ดและเปลี่ยนคุณสมบัติเหล่านี้โปรแกรม เมื่อคุณเชื่อมต่อสตอรีบอร์ดแล้วให้เข้าไปที่โค้ดของคุณ (เช่นในviewDidLoad) และเปลี่ยนคุณสมบัติเหล่านี้โดยพูดว่าself.myTextField.layer.cornerRadiusฯลฯ การเปลี่ยนแปลงเหล่านี้จะมีผลทันทีที่คุณเปิดแอป แต่คุณจะไม่เห็นการเปลี่ยนแปลงใน Storyboard หากสิ่งนี้ไม่สมเหตุสมผลสำหรับคุณฉันขอแนะนำให้คุณไปที่เว็บไซต์ตัวอย่างเช่น Ray Wenderlich และอ่านข้อมูลสำหรับมือใหม่
Aleksander

@NathanMcKaskle "ฉันจะนำเข้าควอตซ์คอร์ได้ที่ไหน" คุณเพิ่มไว้ที่ด้านบนของไฟล์ ViewController.h ของคุณ "textField" คืออะไรและจะรู้ได้อย่างไรว่าฉันกำลังพูดถึงช่องข้อความใด " คุณสามารถสร้าง IBOutlet var ในฟิลด์ข้อความ 'local' และเชื่อมต่อกับ TextField (ไม่ใช่ TextView) ที่คุณเพิ่งใส่ไว้ใน Storyboard สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบที่นี่: hubpages.com/technology/… "ฉันจะเพิ่มข้อมูลชายแดนด้านบนได้ที่ไหน" ทุกที่ แต่ควรอยู่ที่ฟังก์ชัน viewDidLoad
Chen Li Yong

21

ลองสิ่งนี้:

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>

17

นำเข้าคลาสต่อไปนี้:

#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ด้วยหมายเลขสีตามต้องการ


14

คำถามนี้ปรากฏในการค้นหาของ 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


10

เพื่อให้การดำเนินการนี้ง่ายขึ้นจากคำตอบที่ยอมรับคุณยังสามารถสร้างหมวดหมู่สำหรับUIView(เนื่องจากใช้ได้กับคลาสย่อยทั้งหมดของ 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];

9

หากคุณใช้ 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];

9

อัปเดตสำหรับ swift 5.0

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

4

borderColorในมุมมองใด ๆ (หรือ UIView Subclass) สามารถตั้งค่าได้โดยใช้สตอรี่บอร์ดที่มีการเข้ารหัสเล็กน้อยและวิธีนี้อาจมีประโยชน์มากหากคุณตั้งค่าสีเส้นขอบบนวัตถุ UI หลาย ๆ

ด้านล่างนี้เป็นขั้นตอนในการบรรลุเป้าหมาย

  1. สร้างหมวดหมู่ในคลาส CALayer ประกาศทรัพย์สินของประเภทUIColorกับชื่อที่เหมาะสมผมจะชื่อเป็นborderUIColor
  2. เขียน setter และ getter สำหรับคุณสมบัตินี้
  3. ในเมธอด 'Setter' เพียงตั้งค่าคุณสมบัติ "borderColor" ของเลเยอร์เป็นค่า CGColor สีใหม่
  4. ในเมธอด 'Getter' ส่งคืน UIColor ด้วย borderColor ของเลเยอร์

PS: โปรดจำไว้ว่าหมวดหมู่ไม่สามารถจัดเก็บคุณสมบัติได้ '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. คลิกที่ "Identity Inspector" (ที่ 3 จากซ้าย) ในแผง "Utility" (ด้านขวาของหน้าจอ)
  3. ภายใต้ "User Defined Runtime Attributes" คลิกที่ปุ่ม "+" เพื่อเพิ่มเส้นทางสำคัญ
  4. กำหนดประเภทของเส้นทางสำคัญเป็น "สี"
  5. ป้อนค่าสำหรับพา ธ คีย์เป็น "layer.borderUIColor" [โปรดจำไว้ว่านี่ควรเป็นชื่อตัวแปรที่คุณประกาศในหมวดหมู่ไม่ใช่borderColor ในที่นี้คือborderUIColor ]
  6. สุดท้ายเลือกสีที่คุณต้องการ

คุณต้องตั้งค่าคุณสมบัติlayer.borderWidthเป็นอย่างน้อย 1 เพื่อดูสีเส้นขอบ

สร้างและเรียกใช้ Happy Coding. :)


โปรดอย่าโพสต์คำตอบที่เหมือนกันสำหรับคำถามหลายข้อ โพสต์คำตอบที่ดีหนึ่งคำตอบจากนั้นโหวต / ตั้งค่าสถานะเพื่อปิดคำถามอื่นที่ซ้ำกัน หากคำถามไม่ซ้ำกันให้ปรับแต่งคำตอบของคุณให้เหมาะกับคำถามนั้น
josliber

1

นี่คือการใช้งาน Swift คุณสามารถสร้างส่วนขยายเพื่อให้มุมมองอื่น ๆ สามารถใช้งานได้หากต้องการ

extension UIView {
    func addBorderAndColor(color: UIColor, width: CGFloat, corner_radius: CGFloat = 0, clipsToBounds: Bool = false) {
        self.layer.borderWidth  = width
        self.layer.borderColor  = color.cgColor
        self.layer.cornerRadius = corner_radius
        self.clipsToBounds      = clipsToBounds
    }
}

เรียกสิ่งนี้ว่า: email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.