创建两个只有底部边框swift的文本字段

时间:2017-07-05 14:17:15

标签: ios swift

我试图创建两个只有底部边框的UITextField,我从另一个StackOverflow获得了一些代码并且它有效。但是,当我再次为第二个TextField复制并粘贴代码时,它只显示一个带有底部边框的TextField。

以下是代码:

 let border = CALayer()
 let width = CGFloat(2.0)
 border.borderColor = UIColor.gray.cgColor
 border.frame = CGRect(x: 0, y: emailText.frame.size.height - 
width, width:  emailText.frame.size.width, height: 
emailText.frame.size.height)

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

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

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

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

CALayer是基于实例的,这意味着如果您将图层添加到视图中,则无法将其添加到新视图而不从第一个视图中删除它。创建两个CALayer s或更好的实例,创建一个产生所需结果的扩展。

答案 1 :(得分:0)

为电子邮件文本字段和用户名文本字段创建单独的边框对象。

let emailborder = CALayer()
let passwordborder = CALayer()

let width = CGFloat(2.0)
emailborder.borderColor = UIColor.gray.cgColor
emailborder.frame = CGRect(x: 0, y: emailText.frame.size.height - 
width, width:  emailText.frame.size.width, height: 
emailText.frame.size.height)

passwordborder.frame = CGRect(x: 0, y: passwordText.frame.size.height 
- width, width:  passwordText.frame.size.width, height: 
passwordText.frame.size.height)

passwordborder.borderWidth = width
passwordText.layer.addSublayer(passwordborder)
passwordText.layer.masksToBounds = true

emailborder.borderWidth = width
emailText.layer.addSublayer(emailborder)
emailText.layer.masksToBounds = true

答案 2 :(得分:0)

您无法对两个文本字段使用相同的视图。使用第二个边框的副本。最简单的方法是将变量细化为border2并将其设置为子层。不要忘记为寄宿生删除重复的帧分配。

let border = CALayer()  
let width = CGFloat(2.0)  
border.borderColor = UIColor.gray.cgColor  
border.frame = CGRect(x: 0, y: emailText.frame.size.height -  width, width:  emailText.frame.size.width, height:  emailText.frame.size.height)

let border2 = CALayer() border2.borderColor = border.borderColor border2.frame = border.frame;

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

border.borderWidth = width
emailText.layer.addSublayer(border2)
emailText.layer.masksToBounds = true

答案 3 :(得分:0)

如果不编写冗余代码,最好的方法是创建一个函数,将想要的文本字段作为参数传递,并将样式代码保存在那里:

func setBorder(tf: UITextField) {

    let border = CALayer()
    let width = CGFloat(2.0)

    border.borderColor = UIColor.gray.cgColor
    border.frame = CGRect(x: 0, y: tf.frame.size.height - width, 
    width:  tf.frame.size.width, height: 
    tf.frame.size.height)
    border.borderWidth = width

    tf.layer.addSublayer(border)
    tf.layer.masksToBounds = true
}   

在viewDidLoad中调用此函数:

setBorder(tf: emailText)
setBorder(tf: passwordText)

希望这有帮助!