是否可以将图像或 xib 设置为文本字段中的值?

Is it possible to set an image or xib as value in textfield?

如标题所述,我希望将图像或 xib 作为我的文本字段中的值。这是我的设计:

对于 3 个黑点,我可以通过使用占位符来实现,但是第一个有值的文本字段呢?我需要设置一个带边框的圆形紫色,作为文本字段的值,这意味着用户可以删除它并编辑文本字段。

我试过这样做:

let imageView = UIImageView();
let image = UIImage(named: "dot-icon");
imageView.image = image;
imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
tfTest.addSubview(imageView)
let leftView = UIView.init(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
tfTest.leftView = leftView;
tfTest.leftViewMode = UITextFieldViewMode.always

这可以通过向文本字段添加图像来实现我想要的,但是现在文本字段不可编辑。

有人有什么想法吗?

谢谢

取 4 个 imageView [pinImgView1, pinImgView2, pinImgView3, pinImgView4]

和一个 TextField [pinTextField]。

删除方法:

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
    {
        let characterSet = CharacterSet(charactersIn: "0123456789")
        if (string.rangeOfCharacter(from: characterSet) == nil && string.characters.count > 0)
        {
            return false
        }

        let newString = (self.pinTextField.text! as NSString).replacingCharacters(in: range, with: string) as NSString
        self.showPinImagesAsPerString(stringPIN: newString as String)
        return true
    }

然后添加这个方法:

    @objc func clearTextField()
    {
        self.pinTextField.text = ""
        self.pinImgView1.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView2.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView3.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView4.image = #imageLiteral(resourceName: "icon_black")
        self.pinTextField.becomeFirstResponder()
    }

    func showPinImagesAsPerString(stringPIN: String)
    {
        let length = stringPIN.characters.count
        self.pinImgView1.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView2.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView3.image = #imageLiteral(resourceName: "icon_black")
        self.pinImgView4.image = #imageLiteral(resourceName: "icon_black")

        if length > 0{
            self.pinImgView1.image = #imageLiteral(resourceName: "icon_Purple")
        }
        if length > 1{
            self.pinImgView2.image = #imageLiteral(resourceName: "icon_Purple")
        }
        if length > 2{
            self.pinImgView3.image = #imageLiteral(resourceName: "icon_Purple")
        }
        if length > 3{

            self.pinImgView4.image = #imageLiteral(resourceName: "icon_Purple")

          //here you need to check entered PIN (stringPIN) is correct or not

        }
    }