我试图创建两个只有底部边框的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
感谢您的帮助!
答案 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)
希望这有帮助!