2016-10-03 2 views
1

Я пытаюсь сделать приятный textField, но это не сработало. Поэтому моя проблема заключается в том, когда я начинаю редактировать текстовое поле, мне нужно изменить цвет границы на другой, но когда это произойдет, моя пользовательская граница будет по умолчанию прямоугольной. То, что я хочу, это просто изменить цвет нижней границы.Невозможно изменить пользовательский UITextField цвет границы

func textFieldDidBeginEditing(_ textField: UITextField) { 

    nameField.borderStyle = UITextBorderStyle.none 
    nameField.layer.borderWidth = 2.0 
    nameField.layer.borderColor = UIColor.red.cgColor 
    nameField.layer.masksToBounds = true 
    print("lol") 
} 

public func testField() { 
    let border = CALayer() 
    let width = CGFloat(2.0) 

    border.borderColor = lightBlue 
    border.frame = CGRect(x: 0, y: nameField.frame.size.height - width, width: nameField.frame.size.width, height: nameField.frame.size.height) 

    border.borderWidth = width 
    nameField.layer.addSublayer(border) 
    nameField.layer.masks[ToBounds = true 
} 

enter image description here enter image description here

+0

вы можете принять вид чуть ниже текстового поле и вид изменения цвета, как TextField becomefirstresponder –

+0

Вашего textfeild цвета границы меняется, но, как вы добавляете свой собственный пограничный слой, это переопределить, и вы не в состоянии видеть chnged границы цвет. –

+0

Проверьте ответы и выберите нужный –

ответ

0

Сделайте своей границей

let border = CALayer() 

Global и просто изменить свою BorderColor в textFieldDidBeginEditing

func textFieldDidBeginEditing(_ textField: UITextField) { 
    border.borderColor = UIColor.red.cgColor 
} 

Надеется, что это помогает.

+0

это не поможет :) –

0

Используйте этот кусок кода

func textFieldDidBeginEditing(_textField: UITextField) { 
    nameField.layer.sublayers![1].borderColor = UIColor.redColor().CGColor 

} 

func testField() { 
    nameField.layer.sublayers![0].hidden = true 
    let border = CALayer() 
    border.frame = CGRectMake(0, nameField.frame.size.height - 2, nameField.frame.size.width, 20) 
    border.borderColor = UIColor.blueColor().CGColor 
    border.borderWidth = 2 
    nameField.layer.addSublayer(border) 
} 
1

Вот решение. Я подклассифицировал UITextField и переопределил layoutSubviews func с проверкой, является ли он firstResponder (означает, что курсор есть) или нет, и устанавливает соответствующий цвет.

Swift (3,0):

class TextField: UITextField { 
    lazy var bottomBorder: CALayer = { 
      let border = CALayer(); 
      border.borderColor = UIColor.white.cgColor; 
      border.borderWidth = 1; 
      return border 
    }() 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     borderStyle = .none; 
     layer.addSublayer(bottomBorder); 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews(); 

     let borderColor = isFirstResponder ? UIColor.blue : UIColor.white; 
     bottomBorder.borderColor = borderColor.cgColor; 
     bottomBorder.frame = CGRect(x: 0, y: layer.frame.size.height - 1, width: layer.frame.size.width, height: 1) 
    } 
} 

Objective-C

@interface TextField() 

@property (nonatomic, strong) CALayer *bottomBorder; 

@end 

@implementation TextField 

- (void)awakeFromNib { 
    [super awakeFromNib]; 

    [self.layer addSublayer:self.bottomBorder]; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UIColor *borderColor = self.isFirstResponder ? [UIColor blueColor] : [UIColor whiteColor]; 
    self.bottomBorder.borderColor = borderColor.CGColor; 
    self.bottomBorder.frame = CGRectMake(0, self.layer.frame.size.height - 1, self.layer.frame.size.width, 1); 
} 

- (CALayer *)bottomBorder { 
    if (!_bottomBorder) { 
     _bottomBorder = [CALayer layer]; 
     _bottomBorder.borderColor = [UIColor whiteColor].CGColor; 
     _bottomBorder.borderWidth = 1; 
    } 
    return _bottomBorder; 
} 

@end 
0

Попробуйте добавить эту строку кода в методе func textFieldDidBeginEditing(_ textField: UITextField), это удалит ваш пользовательский слой, и вы можете увидеть изменения сделанный.

if (nameField.layer.sublayers?.count)! > 0{ 
    nameField.layer.sublayers?[0].removeFromSuperlayer() 
} 

Надеюсь, это поможет.

0

Вам нужно добавить дополнительный подуровень к границе текстового поля, чтобы вы могли назначить любой цвет.

let border = CALayer() 
    let width = CGFloat(1.0) 
    border.borderColor = UIColor(red: 188/255, green: 189/255, blue: 192/255 , alpha: 1).CGColor 
    border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width: textField.frame.size.width, height: textField.frame.size.height) 
    border.borderWidth = width 
    textField.layer.addSublayer(border) 
    textField.layer.masksToBounds = true 
Смежные вопросы