2017-01-03 3 views
0

я добавил нижнюю границу UITextField таким образом:Изменить цвет границы UITextField

let bottomLine = CALayer() 
bottomLine.frame = CGRectMake(0.0, self.frame.height, self.frame.width, CGFloat(borderWidth)) 
bottomLine.backgroundColor = borderColor.CGColor 
self.borderStyle = UITextBorderStyle.None 
self.layer.addSublayer(bottomLine) 

Как я могу изменить цвет границы этой нижней линии, когда UITextField вызова textFieldDidBeginEditing(), а затем изменить обратно цвет по умолчанию при вызове textFieldDidEndEditing()

Я использую пользовательский класс UITextField

+0

Вы назначили свойство делегата текстового поля объекту, который соответствует протоколу делегата UITextField? И вы внедрили функции textFieldDidBeginEditing() и textFieldDidEndEditing() в этом делетете? – cpatmulloy

+0

Да, у меня есть. Я просто не знаю, как изменить свойства 'bottomLine', которые я добавил в' подуровень'. –

+0

@Amirhosseingholzam, пожалуйста, проверьте мой ответ, он отлично работает в соответствии с вашим ожиданием, просто дайте свои цвета, которые вы хотите в конце редактирования, и начал –

ответ

0

методы Take действие textfield в editing did begin and editing did end

Это будет работать нормально, я испытал это

@IBAction func didbegin(_ sender: AnyObject) { 
     let border = CALayer() 
     let width = CGFloat(2.0) 
     border.borderColor = UIColor.green.cgColor 
     border.frame = CGRect(x: 0, y: txtfield.frame.size.height - width, width: txtfield.frame.size.width, height: txtfield.frame.size.height) 

     border.borderWidth = width 
     txtfield.layer.addSublayer(border) 
     txtfield.layer.masksToBounds = true 
    } 


    @IBAction func endediting(_ sender: AnyObject) { 
     let border = CALayer() 
     let width = CGFloat(2.0) 
     border.borderColor = UIColor.black.cgColor 
     border.frame = CGRect(x: 0, y: txtfield.frame.size.height - width, width: txtfield.frame.size.width, height: txtfield.frame.size.height) 

     border.borderWidth = width 
     txtfield.layer.addSublayer(border) 
     txtfield.layer.masksToBounds = true 

    } 

Надежда эта вещь поможет вам.

+0

Между вашим ответом и другим нет другого отличия, кроме того, что вы написали его в swift 3. Во всяком случае, спасибо за ваш ответ. Проблема в том, что ваш код должен добавить много добавочный 'layer' в каждом событии, но мне нужно оптимизировать мое приложение. И когда я помещаю этот код в' layoutSubviews' для отображения по умолчанию, он не работает для событий редактирования. –

+0

Как и по вашему вопросу, я думаю, что ваша проблема решена. Этот код работает только с выходом. Итак, если вы хотите, чтобы это со всем текстовым полем, то U должен использовать его метод делегирования для этого, или U может дать тот же выход для каждого текстового поля –

1

Постарайся просто заново добавить слой с цветом по умолчанию в методе textFieldDidEndEditing, как так :

func textFieldDidBeginEditing(_ textField: UITextField) { 
     let bottomLine = CALayer() 
     bottomLine.frame = CGRectMake(0.0, self.frame.height, self.frame.width, CGFloat(borderWidth)) 
     bottomLine.backgroundColor = borderColor.CGColor 
     self.borderStyle = UITextBorderStyle.None 
     self.layer.addSublayer(bottomLine) 
    } 

func textFieldDidEndEditing(_ textField: UITextField) { 
    let bottomLine = CALayer() 
    bottomLine.frame = CGRectMake(0.0, self.frame.height, self.frame.width, CGFloat(borderWidth)) 
    bottomLine.backgroundColor = defaultColor.CGColor 
    self.borderStyle = UITextBorderStyle.None 
    self.layer.addSublayer(bottomLine) 
} 

Это работало для меня

+0

Спасибо :), но это не работает для меня :(Даже если бы я использовал этот путь, я должен добавить много «лишнего слоя», но мне нужно оптимизировать свое приложение. –

0
func viewWillAppear(_ animated: Bool) { 
     let border = CALayer() 
     let width = CGFloat(2.0) 
     border.borderColor = UIColor.white.cgColor 
     border.frame = CGRect(x: 0, y: yourTextFeild.frame.size.height - width, width: yourTextFeild.frame.size.width, height: yourTextFeild.frame.size.height) 

     border.borderWidth = width 
     yourTextFeild.layer.addSublayer(border) 
     yourTextFeild.layer.masksToBounds = true 
    } 

//Mark Textfield Delegate 
    func textFieldDidBeginEditing(_ textField: UITextField) { 

     for layer in textField.layer.sublayers!{ 
      layer.borderColor = UIColor.green.cgColor 

     } 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     for layer in textField.layer.sublayers!{ 
      layer.borderColor = UIColor.white.cgColor 
     } 
    } 
Смежные вопросы