UITextField 테두리 색


133

내 자신의 색상을 UITextField 테두리로 설정하고 싶습니다. 그러나 지금까지 경계선 스타일 만 변경하는 방법을 알 수있었습니다.

background 속성을 사용하여 다음과 같은 방법으로 배경색을 설정했습니다.

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
QuartCore 대신 #import <QuartzCore / QuartzCore.h>입니다 (z를 잊어 버렸습니다)
cldrr

54
iOS 7에서는 테두리 너비를 설정해야합니다. 그렇지 않으면 색상이 적용되지 않습니다.
Micah

1
초보자로서 이것은 나에게 의미가 없습니다. 비어있는 빈 앱을 시작하면 스토리 보드로 이동하여 TextView 필드를 추가하십시오. 쿼츠 코어를 어디로 가져 옵니까? 위의 경계 너비 정보를 어디에 추가합니까? "textField"란 무엇이며 내가 말하는 텍스트 필드를 어떻게 알 수 있습니까?
Nathan McKaskle

1
@Sephethus 아직 이해하지 못했다면 스토리 보드에서 만든 텍스트 필드를 "연결"하고 프로그래밍 방식으로 이러한 속성을 변경해야합니다 . 스토리 보드를 연결하면 코드 (예 :에서 viewDidLoad) 로 이동하여 self.myTextField.layer.cornerRadius등 을 말하여 이러한 속성을 변경합니다 . 이러한 변경 사항은 앱을 시작하자마자 적용되지만 스토리 보드에서 변경 사항을 볼 수는 없습니다. 이것이 의미가 없다면 Ray Wenderlich와 같은 웹 사이트를 방문하여 초보자 튜터를 읽으십시오.
Aleksander

@NathanMcKaskle " 쿼츠 코어를 어디로 가져 옵니까?" ViewController.h 파일 위에 추가하십시오. ""텍스트 필드 "란 무엇이며 내가 말하는 텍스트 필드를 어떻게 알 수 있습니까?" '로컬'텍스트 필드 IBOutlet var를 만들어 스토리 보드에 방금 입력 한 TextField (TextView 아님)에 연결할 수 있습니다. 자세한 내용은 여기를 확인하십시오. 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];

8

swift 5.0 업데이트

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

4

약간의 코딩으로 스토리 보드를 사용하여 모든보기 (또는 UIView 하위 클래스)의 borderColor 를 설정할 수도 있으며이 방법은 여러 UI 객체에서 테두리 색상을 설정하는 경우 매우 유용 할 수 있습니다.

다음은이를 달성하는 단계입니다.

  1. CALayer 클래스에서 카테고리를 작성하십시오. 적절한 이름으로 UIColor 유형의 속성을 선언하면 borderUIColor 로 이름을 지정합니다 .
  2. 이 프로퍼티의 세터와 게터를 작성합니다.
  3. 'Setter'방법에서 레이어의 "borderColor"속성을 새로운 색상 CGColor 값으로 설정하십시오.
  4. 'Getter'메소드에서 레이어의 borderColor를 가진 UIColor를 반환합니다.

추신 : 카테고리에는 속성을 저장할 수 없습니다. '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

스위프트 2.0 :

extension CALayer {
var borderUIColor: UIColor {
    set {
        self.borderColor = newValue.CGColor
    }

    get {
        return UIColor(CGColor: self.borderColor!)
    }
}
}

마지막으로 스토리 보드 / XIB로 가서 나머지 단계를 따르십시오.

  1. 테두리 색상을 설정하려는보기 개체를 클릭하십시오.
  2. "유틸리티"(화면 오른쪽) 패널에서 "Identity Inspector"(왼쪽에서 세 번째)를 클릭하십시오.
  3. "사용자 정의 런타임 속성"에서 "+"버튼을 클릭하여 키 경로를 추가하십시오.
  4. 키 경로의 유형을 "컬러"로 설정하십시오.
  5. 키 경로의 값을 "layer.borderUIColor"로 입력하십시오. [이가해야 기억 변수 이름 없는, 당신이 범주에 선언 의 borderColor 여기의 borderUIColor ].
  6. 마지막으로 원하는 색상을 선택하십시오.

테두리 색상을 보려면 layer.borderWidth 속성 값을 1 이상 으로 설정 해야 합니다.

빌드하고 실행하십시오. 행복한 코딩. :)


여러 질문에 동일한 답변을 게시하지 마십시오. 하나의 좋은 답변을 게시 한 다음 투표 / 플래그를 붙여 다른 질문을 중복으로 닫습니다. 질문이 중복되지 않은 경우 질문에 대한 답변을 조정하십시오 .
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.