2009-12-07 13 views
112

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

Tôi đã sử dụng tài sản nền để thiết lập màu nền theo cách như vậy:

self.textField.backgroundColor = textFieldColor; 

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

Trả lời

19

Hãy thử điều 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 khẩu QuartzCore:

#import <QuartzCore/QuartzCore.h> 
254

nhập QuartzCore khuôn khổ trong bạn lớp:

#import <QuartzCore/QuartzCore.h> 

và thay đổi màu sắc biên giới sử dụng đoạn mã sau (Tôi đang đặt nó thành màu đỏ),

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

Đối quay trở lại với cách bố trí ban đầu chỉ cần thiết lập màu biên giới để xóa màu,

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

trong mã nhanh chóng

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

Đó là #import thay vì QuartCore (bạn quên z) – cldrr

+49

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

+1

Là 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 có thể thêm thông tin biên giới ở trên ở đâu? "TextField" là gì và làm cách nào để biết trường văn bản nào tôi đang nói đến? –

16

nhập các lớp sau đây:

#import <QuartzCore/QuartzCore.h> 

// Mã để đặt màu xám cho đường 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.0 bằng số màu tương ứng theo yêu cầu.

+5

- tính năng này không hoạt động trên iOS7. –

+0

Nó cũng không hoạt động trong IOS 9. –

10

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

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 

Cách sử dụng:

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

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

Bạn cần phải sửa đổi mã "hoàn nguyên".Tôi phát hiện ra rằng sau cho quay trở lại làm việc một cách 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 đây rất có thể là do sự thay đổi trong iOS 7.

4

borderColor trên bất kỳ view (hoặc UIView Subclass) cũng có thể được thiết lập 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 đang thiết lập màu đường viền trên nhiều đối tượng giao diện người dùng.

Dưới đây là các bước làm thế nào để đạt được điều đó,

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

P.S: Hãy nhớ rằng, Danh mục không thể lưu trữ các thuộc tính. 'borderUIColor' được sử dụng làm thuộc tính được tính toán, cũng giống như tham chiếu để đạt được những gì chúng tôi đang tập trung vào.

Vui lòng xem mẫu mã bên dưới;

C Mục tiêu:

Giao diện File:

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

@interface CALayer (BorderProperties) 

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

@end 

Thực hiện File:

#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 chuyển đến bảng phân cảnh/XIB của bạn, hãy làm theo các bước còn lại;

  1. Nhấp vào đối tượng Chế độ xem mà bạn muốn đặt Màu đường viền.
  2. Nhấp vào "Trình kiểm tra nhận dạng" (thứ 3 từ trái) trong bảng "Tiện ích" (Phía bên phải của 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 số bạn đã khai báo trong danh mục, không phải borderColor tại đây là borderUIColor].
  6. Cuối cùng chọn bất kỳ màu nào bạn muốn.

Bạn phải đặt lớp.borderWidth giá trị thuộc tính ít nhất là 1 để xem màu đường viền.

Xây dựng và chạy. Mã hóa hạnh phúc. :)

+0

Vui lòng không đăng 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 bản sao. Nếu câu hỏi không trùng lặp, hãy _đưa câu trả lời của bạn cho câu hỏi_. – josliber

1

Nếu bạn sử dụng một TextField với góc tròn 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; 

Để loại bỏ các biên giới:

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