Колір рамки UITextField


133

Я дуже хочу побажати встановити свій власний колір для межі UITextField. Але поки що я міг дізнатися, як змінити стиль межі лише.

Я використовував властивість фону, щоб встановити колір фону таким чином:

self.textField.backgroundColor = textFieldColor;

Але я також повинен змінити колір межі UITextField. І моє запитання полягало в тому, як змінити колір межі.


Дуже багато корисних відповідей, але лише одна ( stackoverflow.com/a/5387607/826946 ) згадувала щось, що я знайшов ключ: textField.borderStyle = UITextField.BorderStyle.none. Без цього я отримую сліди від вбудованого бордюру. Здається, щойно ви не використовуєте вбудований кордон і не почнете визначати свій власний, вам потрібно сказати, що ви не хочете, використовуючи borderStyle = none, а потім визначити всі параметри (колір, cornerRadius і borderWidth)
Енді Вайнштейн

Відповіді:


274

Імпорт QuartzCoreрамки у вашому класі:

#import <QuartzCore/QuartzCore.h>

а для зміни кольору рамки використовуйте наступний фрагмент коду (я встановлюю його на 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

3
Це #import <QuartzCore / QuartzCore.h> замість QuartCore (ви забули z)
cldrr

54
В iOS 7 ви повинні встановити ширину межі, якщо колір не набуває чинності.
Міхей

1
Як для початківців це не має для мене сенсу. Якщо я запускаю порожній, порожній додаток, перейдіть до таблиці та додайте поле TextView. Куди імпортувати кварцкор? Де я можу додати інформацію про ширину межі вище? Що таке "textField" і як дізнатися, про яке текстове поле я говорю?
Натан Маккаскле

1
@Sephethus, якщо ви ще цього не зрозуміли, це те, що вам потрібно зробити: ви повинні «підключити» створене вами текстове поле на аркуші розробки і змінити ці властивості програмно . Після того, як ви підключили дошку, ви переходите до свого коду (наприклад, у viewDidLoad) та змінюєте ці властивості, кажучи self.myTextField.layer.cornerRadiusі т.д. Якщо це не має для вас сенсу, я пропоную вам зайти на веб-сайт, наприклад, Рей Вендерліх, і прочитати кілька порад для початківців.
Олександр

@NathanMcKaskle "Де я імпортую кварцкор?" Ви додаєте його у верхній частині файлу ViewController.h. "Що таке" textField "і як воно знає, про яке текстове поле я говорю?" Ви можете створити "локальний" текстовий полі IBOutlet і підключити його до TextField (а не TextView), який ви щойно помістили на Дошку розгортки. Для отримання додаткової інформації перегляньте тут: hubpages.com/technology/… "Де я додати інформацію про ширину кордону вище?" У будь-якому місці, але бажано, при перегляді функціїDidLoad.
Чень Лі Йонг

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 і працює здебільшого! Я виявив, що відповідь Салмана Заїді була частково правильною для 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 + Додатки.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

Оновлення для швидкого 5.0

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

4

кордон кольору для будь-якого виду (або підкласу UIView) також можна встановити, використовуючи розкадровку з невеликим кодуванням, і цей підхід може бути дуже корисним, якщо ви встановлюєте колір межі для кількох об'єктів інтерфейсу.

Нижче наведено кроки, як цього досягти,

  1. Створіть категорію за класом CALayer. Заявіть про властивість типу UIColor з відповідною назвою, я назву її borderUIColor .
  2. Напишіть сетер та геттер для цієї властивості.
  3. У методі "Setter" просто встановіть властивість шару "borderColor" на нові кольори значення CGColor.
  4. У методі "Getter" поверніть UIColor з межею шаруColor.

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. Клацніть на "Інспектор ідентичності" (3-й зліва) на панелі "Утиліта" (Права частина екрана).
  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).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.