ios - UITextField 渐变背景颜色

标签 ios swift uitextfield

我正在尝试创建一个具有渐变背景并在两种颜色之间移动的 UITextField。

我想从本质上创造这种效果 - uitextfield example

我正在以编程方式构建我的 View ,而不是使用 Storyboard。

我尝试根据其他答案围绕 UIView 添加扩展,但这对我的文本字段没有影响。

背景仍然是白色。

extension UIView {      
    func setGradient(startColor:UIColor,endColor:UIColor) {
        let gradient:CAGradientLayer = CAGradientLayer()
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.locations = [0.0 , 1.0]
        gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
        gradient.endPoint = CGPoint(x: 0.0, y: 1.0)
        gradient.frame = self.bounds
        self.layer.insertSublayer(gradient, at: 0)
    }
}

然后我可以这样应用它..

private let emailTextField: UITextField = {
    let  tf = UITextField()
    CommonTextField.commonProps(tf: tf, placeholder: "Email")
    tf.setGradient(startColor: .blue, endColor: .purple)
    return tf
}()

但是它什么都不做。我曾尝试在 UITextField 上进行扩展,但无法取得任何结果。

编辑

我已经更新了我的扩展方法如下

extension UITextField {
    func setGradient(startColor: UIColor, endColor: UIColor) {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.locations = [0.0 , 1.0]
        gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
        gradient.endPoint = CGPoint(x: 0.0, y: 1.0)
        gradient.frame = self.bounds
        self.layer.addSublayer(gradient)
    }
}

我的文本字段正在创建如下

private let emailTextField: UITextField = {
    let  tf = UITextField()
    CommonTextField.commonProps(tf: tf, placeholder: "Email")
    tf.setGradient(startColor: .blue, endColor: .purple)
    return tf
}()

最佳答案

扩展应该用于文本字段而不是 UIView ,注意使用 self.layer.addSublayer 而不是 self.layer.insertSublayer 或者

 self.layer.insertSublayer(gradient, at: 1)  

/////

extension UITextField {      
  func setGradient(startColor:UIColor,endColor:UIColor) {
    let gradient:CAGradientLayer = CAGradientLayer()
    gradient.colors = [startColor.cgColor, endColor.cgColor]
    gradient.locations = [0.0 , 1.0]
    gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
    gradient.endPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.frame = self.bounds
    self.layer.addSublayer(gradient) 
  }

}

使用

self.textField.setGradient(startColor:UIColor.red, endColor: UIColor.blue)

关于ios - UITextField 渐变背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48365783/

相关文章:

ios viewcontroller 在容器内调用子viewcontroller

ios - 以编程方式使用 UIPickerView 文本设置 UITextField 文本

ios - 将照片添加到我的应用程序并存储在核心数据中

ios - 我可以使用多个自定义 URL 方案来使用 Facebook iOS SDK 进行身份验证吗

ios - 从子类 setDelegate 设置父类(super class)委托(delegate)

ios - 将 UITextField 的 inputView 属性设置为在 Swift 中不起作用的 UIPicker

iphone - 设置编辑 :animated: is missing animation?

ios - 推送通知在 IOS 11 中不起作用

iphone - 如何在 UITextField 上自动打开键盘?

ios - 在 swift 中设置 UITextfield 占位符的字体