2016-07-26 55 views
2

其实我试图改变每个文本框的边框颜色(通过增加边框宽度)。在textField上创建和删除边框线

我用stotyBoard给了textFieldEmailAddress.tag = 1和textFieldPassword.tag = 2。

我正在使用UITextFieldDelegate。

意味着我的要求是: -
1.当我在文本字段上单击其边框的颜色应该是深蓝色(WIDTH = 0.8) 和其他文本域边界线的颜色应为淡蓝色(WIDTH = 0.4)

  1. 如果我们不点击文本字段,其边框线颜色应该是浅蓝色(宽度= 0.4)。

但是我在第一次点击文本字段时工作正常,但是当我点击另一个文本字段时,它会给出深蓝色的边框颜色,所以我面临一个问题。

问题是whaever文本框变成了0.8它不是在UI恢复到0.4(指UI并不只更新值得到更新至0.4)

是什么东西错在委托方法或在我下面的代码: -

//查看有没有加载功能的文本字段

override func viewDidLoad() 
{ 
    //Set delegate 
    self.textFieldEmailAddress.delegate = self 
    self.textFieldPassword.delegate = self 

    //Create border line on text email address fields. 
    self.borderline(textFieldEmailAddress) 

    //Create border line on text password fields. 
    self.borderline(textFieldPassword) 

} 

func textFieldDidBeginEditing(textField: UITextField) 
{ 
    switch textField.tag 
    { 

    case 1: 

     self.Darkborderline(textFieldEmailAddress) 
     break 

    case 2: 

     self.Darkborderline(textFieldPassword) 
     break 

    default: 
     break 
    } 
} 



func textFieldDidEndEditing(textField: UITextField) 
{ 
    switch textField.tag 
    { 

    case 1: 

     self.borderline(textFieldEmailAddress) 
     break 

    case 2: 

     self.borderline(textFieldPassword) 
     break 

    default: 
     break 
    } 
} 

//淡蓝色的边界线。

func borderline(textField : UITextField) 
{ 

    switch textField.tag 
    { 

    case 1: 
      width = CGFloat(0.40) 

      let border = CALayer() 
      border.borderColor = UIColor.blueColor().CGColor 
      border.frame = CGRect(x: 0, y: textFieldEmailAddress.frame.size.height - width, 
            width: textFieldEmailAddress.frame.size.width, height: width) 
      border.borderWidth = width 
      textFieldEmailAddress.borderStyle = UITextBorderStyle.None 
      textFieldEmailAddress.layer.addSublayer(border) 
      textFieldEmailAddress.layer.masksToBounds = true 

      break 

    case 2: 

      width = CGFloat(0.40) 

      let border = CALayer() 
      border.borderColor = UIColor.blueColor().CGColor 
      border.frame = CGRect(x: 0, y: textFieldPassword.frame.size.height - width, 
            width: textFieldPassword.frame.size.width, height: width) 
      border.borderWidth = width 
      textFieldPassword.borderStyle = UITextBorderStyle.None 
      textFieldPassword.layer.addSublayer(border) 
      textFieldPassword.layer.masksToBounds = true 

      break 

    default: break 

    } 
} 

//深蓝色文本字段上的边框线。

func Darkborderline(textField : UITextField) 
{ 
    //let border = CALayer() 

    switch textField.tag 
    { 
    case 1: 
      width = CGFloat(0.80) 

      let border = CALayer() 
      border.borderColor = UIColor.blueColor().CGColor 
      border.frame = CGRect(x: 0, y: textFieldEmailAddress.frame.size.height - width, 
            width: textFieldEmailAddress.frame.size.width, height: width) 
      border.borderWidth = width 
      textFieldEmailAddress.borderStyle = UITextBorderStyle.None 
      textFieldEmailAddress.layer.addSublayer(border) 
      textFieldEmailAddress.layer.masksToBounds = true 

     break 

    case 2: 
      width = CGFloat(0.80) 

      let border = CALayer() 
      border.borderColor = UIColor.blueColor().CGColor 
      border.frame = CGRect(x: 0, y: textFieldPassword.frame.size.height - width, 
            width: textFieldPassword.frame.size.width, height: width) 
      border.borderWidth = width 
      textFieldPassword.borderStyle = UITextBorderStyle.None 
      textFieldPassword.layer.addSublayer(border) 
      textFieldPassword.layer.masksToBounds = true 

      break 

    default: break 
    } 
} 

回答

1

首先声明一个方法来设置底部边框还田和使用的UITextFieldDelegate委托方法像这样

viewDidLoad第一薄边框这样的分配给两个领域

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.setBottomBorder(self.textFieldEmailAddress, width: 0.4) 
    self.setBottomBorder(self.textFieldPassword, width: 0.4) 
    self.setBottomBorder(self.passwordBtn, width: 0.4) 
} 

func setBottomBorder(view: UIView, width: CGFloat) { 

    let border = CALayer() 
    border.name = "BottomBorder" 
    border.borderColor = UIColor.blueColor().CGColor 
    border.frame = CGRect(x: 0, y: view.frame.size.height - width, 
     width: view.frame.size.width, height: width) 
    border.borderWidth = width 
    view.borderStyle = UITextBorderStyle.None 
    view.layer.addSublayer(border) 
    view.layer.masksToBounds = true 
} 

func removeBottomBorder(view: UIView) { 
    if let sublayers = view.layer.sublayers { 
     for layer: CALayer in sublayers { 
      if layer.name == "BottomBorder" { 
       layer.removeFromSuperlayer() 
       break 
      } 
     } 
    } 
} 

func textFieldDidBeginEditing(textField: UITextField) { 
    self.removeBottomBorder(textField) 
    self.setBottomBorder(textField, width: 0.8) 
    if (textFieldPassword == textField) { 
     self.setBottomBorder(self.passwordBtn, width: 0.8) 
    } 
} 

func textFieldDidEndEditing(textField: UITextField) { 
    self.removeBottomBorder(textField) 
    self.setBottomBorder(textField, width: 0.4) 
    if (textFieldPassword == textField) { 
     self.removeBottomBorder(self.passwordBtn) 
     self.setBottomBorder(self.passwordBtn, width: 0.4) 
    } 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 
+0

好吧,让我检查一次。 谢谢@Nirav – kishor0011

+0

你试过我的回答吗? –

+0

您的代码适用于左侧,右侧,底部和顶部边框,但我想申请底部边框(自定义) – kishor0011

1

尝试这一次。

func textFieldShouldBeginEditing(textField: UITextField) -> Bool 
{ 
    if 1 == textField.tag 
    { 
    selectedTextField = textFieldEmailAddress 
    self.selectedTextField.layer.borderColor = UIColor.blueColor().CGColor 
    self.selectedTextField.layer.borderWidth = 0.8 
    self.selectedTextField = textField 
    self.textFieldPassword.layer.borderColor = UIColor.blueColor().CGColor 
    self.textFieldPassword.layer.borderWidth = 0.4 
    return true 
    } 

    else if 2 == textField.tag 
    { 
     selectedTextField = textFieldPassword 
     self.selectedTextField.layer.borderColor = UIColor.blueColor().CGColor 
     self.selectedTextField.layer.borderWidth = 0.8 
     self.selectedTextField = textField 
     self.textFieldEmailAddress.layer.borderColor = UIColor.blueColor().CGColor 
     self.textFieldEmailAddress.layer.borderWidth = 0.4 
     return true 
    } 

    else 
    { 
     return false 
    } 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool 
{ 
    self.selectedTextField.layer.borderColor = UIColor.blueColor().CGColor 
    self.selectedTextField.layer.borderWidth = 0.4 
    self.selectedTextField = UITextField() 
    textField.resignFirstResponder() 
    return true 
} 
+0

我只需要在文本字段的底部边框线。 – kishor0011