使用swift中的子类使UITexftField像android一样没有任何第三方

时间:2017-10-30 09:25:45

标签: android ios swift3 uitextfield subclass

enter image description here

enter image description here

如何创建Uitextfield看起来像android文本字段

2 个答案:

答案 0 :(得分:0)

我找到了这个解决方案,它对我有用。

按照以下步骤自定义UITextField,例如使用子类的android textfield。

  1. 使用子类UITextField
  2. 创建新的字段
  3. 对于UITextField下方的边框:根据需要设置tint colorlineWidth

    override var tintColor: UIColor! {
        didSet {
            setNeedsDisplay()
        }
    }
    
    override func draw(_ rect: CGRect) {
    
        let startingPoint   = CGPoint(x: rect.minX, y: rect.maxY)
        let endingPoint     = CGPoint(x: rect.maxX, y: rect.maxY)
    
        let path = UIBezierPath()
    
        path.move(to: startingPoint)
        path.addLine(to: endingPoint)
        path.lineWidth = 2.0
    
        tintColor.setStroke()
    
        path.stroke()
    }
    
  4. 指定UItextFieldDelegate

  5. 输入以下代码,询问该子类的代表

    override func awakeFromNib() {    
        self.delegate = self    
    }
    
  6. 同时输入文字字段delegate方法textFieldDidBeginEditingtextFieldDidEndEditing

    //MARK: - Textfield Delegate    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        for view in (textField.superview?.subviews)!{
            if view is UILabel && view.tag == 0{
                let lbl = view as! UILabel
                lbl.isHidden = false
                textField.placeholder = ""
            }
        }
    }
    
    func textFieldDidEndEditing(_ textField: UITextField) {
        if newdelegate != nil{
            newdelegate?.textFieldDidEndEditing!(textField)
        }
        if textField.text?.length == 0{
            for view in (textField.superview?.subviews)!{
                if view is UILabel && view.tag == 0{
                    let lbl = view as! UILabel
                    lbl.isHidden = true
                    textField.placeholder = lbl.text
                }
            }
        }
    }
    
  7. storyboard中制作结构并将此subclass分配给此UItextField

  8. enter image description here

    希望它对你有所帮助 谢谢你。 :)

答案 1 :(得分:0)

  1. 首先在xib文件中转到属性检查。
  2. 打开右侧窗格。
  3. 选择属性检查
  4. 在边框样式中应用无,即用虚线选择一个。
  5. 之后在swift文件中添加以下方法:

    func textViewUnderline(textField: UITextField)**
    { 
       let border = CALayer()
       let width = CGFloat(1.0)  
    
       border.borderColor = UIColor.yourColorforBorderHere.cgColor
    
       border.frame = CGRect(x: 0, y: textField.frame.size.height - width, 
    width:  textField.frame.size.width, height: textField.frame.size.height)
    
       border.borderWidth = width
    
       textField.layer.masksToBounds = true
       textField.layer.addSublayer(border)
    }
    
  6. 通过将viewDidLoad中的uitextfield传递给:

    来调用此方法
    override func viewDidLoad()
    {
       super.viewDidLoad()
       textViewUnderline(textField: yourUITextField)
    }