Màu viền UITextField


133

Tôi thực sự rất muốn đặt màu của riêng mình cho viền UITextField. Nhưng cho đến nay tôi chỉ có thể tìm ra cách thay đổi kiểu đường viền.

Tôi đã sử dụng thuộc tính nền để đặt màu nền theo cách như sau:

self.textField.backgroundColor = textFieldColor;

Nhưng tôi cũng phải thay đổi màu của đường viền UITextField. Và câu hỏi của tôi là về cách thay đổi màu đường viền.


Rất nhiều câu trả lời hữu ích nhưng chỉ có một ( stackoverflow.com/a/5387607/826946 ) đã đề cập đến một cái gì đó tôi tìm thấy khóa: textField.borderStyle = UITextField.BorderStyle.none. Không có điều đó tôi nhận được dấu vết của đường viền tích hợp. Dường như một khi bạn không sử dụng đường viền tích hợp và bắt đầu xác định đường viền của riêng mình, bạn cần nói rằng bạn không muốn nó sử dụng BorderStyle = none và sau đó xác định tất cả các tham số (color, angleRadius và BorderWidth)
Andy Weinstein

Câu trả lời:


274

QuartzCoreKhung nhập trong lớp bạn:

#import <QuartzCore/QuartzCore.h>

và để thay đổi màu đường viền, hãy sử dụng đoạn mã sau (Tôi đang đặt nó thành redColor),

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

Để hoàn nguyên về bố cục ban đầu, chỉ cần đặt màu đường viền thành màu rõ ràng,

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

trong mã nhanh chóng

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

3
Đó là #import <QuartzCore / QuartzCore.h> thay vì QuartCore (bạn đã quên z)
cldrr

54
Trong iOS 7, bạn phải đặt độ rộng đường viền hoặc màu không có hiệu lực.
Mi-chê

1
Là một người mới bắt đầu điều này không có ý nghĩa với tôi. Nếu tôi bắt đầu một ứng dụng trống, trống, hãy chuyển đến bảng phân cảnh và thêm trường TextView. Tôi nhập thạch anh ở đâu? Tôi phải thêm thông tin về băng thông ở trên ở đâu? "TextField" là gì và làm thế nào để biết trường văn bản nào tôi đang nói đến?
Nathan McKaskle

1
@Sephethus nếu bạn chưa tìm ra nó, đây là điều bạn phải làm: bạn phải "kết nối" trường văn bản bạn đã tạo trong bảng phân cảnh và thay đổi các thuộc tính này theo chương trình . Khi bạn đã kết nối bảng phân cảnh, bạn đi vào mã của mình (ví dụ như trong viewDidLoad) và thay đổi các thuộc tính này bằng cách nói, self.myTextField.layer.cornerRadiusv.v. Những thay đổi này sẽ có hiệu lực ngay khi bạn khởi chạy ứng dụng của mình, nhưng bạn không thể thấy các thay đổi trong Bảng phân cảnh. Nếu điều này không có ý nghĩa gì với bạn, tôi khuyên bạn nên truy cập một trang web, ví dụ Ray Wenderlich và đọc một số bài viết mới bắt đầu.
Aleksander

@NathanMcKaskle "Tôi nhập thạch anh ở đâu?" Bạn thêm nó vào đầu tập tin ViewControll.h của bạn. "" TextField "là gì và làm thế nào để biết trường văn bản nào tôi đang nói đến?" Bạn có thể tạo var văn bản 'cục bộ' IBOutlet var và kết nối nó với TextField (không phải TextView) mà bạn vừa đặt trên Storyboard. Để biết thêm thông tin, hãy kiểm tra tại đây: hubpages.com/t Technology / '"Tôi thêm thông tin đường viền ở trên ở đâu?" Bất cứ nơi nào, nhưng tốt nhất, tại chức năng viewDidLoad.
Chen Li Yong

21

Thử cái này:

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];

và nhập QuartzCore:

#import <QuartzCore/QuartzCore.h>

17

Nhập lớp sau:

#import <QuartzCore/QuartzCore.h> 

// Mã để đặt màu xám cho viền của trường văn bản

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

Thay thế 171.0bằng số màu tương ứng theo yêu cầu.


14

câu hỏi này xuất hiện khá cao trên một tìm kiếm Google và hầu hết đều hoạt động! Tôi đã thấy rằng câu trả lời của Salman Zaidi đã đúng một phần cho iOS 7.

Bạn cần sửa đổi mã "hoàn nguyên". Tôi thấy rằng những điều sau đây để hoàn nguyên hoạt động hoàn hảo:

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

Tôi hiểu rằng điều này rất có thể là do những thay đổi trong iOS 7.


10

Để đơn giản hóa hành động này từ câu trả lời được chấp nhận, bạn cũng có thể tạo Danh mục cho UIView(vì cách này hoạt động cho tất cả các lớp con của UIView, không chỉ cho trường văn bản:

UIView + Bổ sung.h:

#import <Foundation/Foundation.h>

@interface UIView (Additions)
- (void)setBorderForColor:(UIColor *)color 
                    width:(float)width 
                   radius:(float)radius;
@end

UIView + Bổ sung.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

Sử dụng:

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

9

Nếu bạn sử dụng TextField với các góc tròn, hãy sử dụng mã này:

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

Để xóa đường viền:

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

8

Cập nhật cho swift 5.0

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

4

BorderColor trên bất kỳ chế độ xem nào (hoặc Lớp con UIView) cũng có thể được đặt bằng cách sử dụng bảng phân cảnh với một chút mã hóa và cách tiếp cận này có thể thực sự tiện dụng nếu bạn đặt màu đường viền trên nhiều Đối tượng UI.

Dưới đây là các bước để đạt được nó,

  1. Tạo một thể loại trên lớp CALayer. Khai báo một thuộc tính loại UIColor với một tên phù hợp, tôi sẽ đặt tên nó là BorderUIColor .
  2. Viết setter và getter cho thuộc tính này.
  3. Trong phương thức 'Setter', chỉ cần đặt thuộc tính "BorderColor" của lớp thành giá trị CGColor màu mới.
  4. Trong phương thức 'Getter', trả về UIColor với đường viền của lớp.

PS: Hãy nhớ rằng, Thể loại không thể có các thuộc tính được lưu trữ. 'BorderUIColor' được sử dụng làm tài sản được tính toán, giống như một tài liệu tham khảo để đạt được những gì chúng tôi đang tập trung vào.

Xin vui lòng xem mẫu mã dưới đây;

Mục tiêu C:

Tệp giao diện:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer (BorderProperties)

// This assigns a CGColor to borderColor.
@property (nonatomic, assign) UIColor* borderUIColor;

@end

Tập tin thực hiện:

#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!)
    }
}
}

Và cuối cùng đi đến bảng phân cảnh của bạn / XIB, làm theo các bước còn lại;

  1. Nhấp vào đối tượng Xem mà bạn muốn đặt Màu viền.
  2. Nhấp vào "Thanh tra danh tính" (thứ 3 từ trái sang) trong bảng "Tiện ích" (Bên phải màn hình).
  3. Trong "Thuộc tính thời gian chạy do người dùng xác định", nhấp vào nút "+" để thêm đường dẫn chính.
  4. Đặt loại đường dẫn chính thành "Màu".
  5. Nhập giá trị cho đường dẫn chính là "layer.borderUIColor". [Hãy nhớ rằng đây phải là tên biến bạn đã khai báo trong danh mục, không phải BorderColor ở đây là BorderUIColor ].
  6. Cuối cùng chọn bất cứ màu nào bạn muốn.

Bạn đã đặt giá trị thuộc tính layer.borderWidth thành ít nhất 1 để xem màu đường viền.

Xây dựng và chạy. Chúc mừng mã hóa. :)


Xin vui lòng không gửi câu trả lời giống hệt nhau cho nhiều câu hỏi. Đăng một câu trả lời hay, sau đó bỏ phiếu / gắn cờ để đóng các câu hỏi khác dưới dạng trùng lặp. Nếu câu hỏi không trùng lặp, điều chỉnh câu trả lời của bạn cho câu hỏi .
josliber

1

Đây là một triển khai Swift. Bạn có thể tạo một tiện ích mở rộng để các chế độ xem khác có thể sử dụng được nếu bạn muốn.

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
    }
}

Gọi như thế này : email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.