2016-10-03 34 views
1

我想製作一個漂亮的textField,但它沒有工作。所以我的問題是,當我開始編輯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

你可以採取一個視圖下方文本框,並更改視圖顏色文本框becomefirstresponder –

+0

你textfeild邊框的顏色正在發生變化,但作爲要添加自定義邊框層,它覆蓋的是,你是不是能夠看到chnged邊界顏色。 –

+0

請檢查出答案,並選擇合適的 –

回答

0

讓你的邊界

let border = CALayer() 

全球以及剛剛改變其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和overrided layoutSubviews函數檢查它是否firstResponder(意味着光標在那裏)或不,並設置相應的顏色。

斯威夫特(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