正如标题所陈述的,我希望把一个图像或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
这可以通过向textfield添加图像来实现我的目的,但是现在textfield是不可编辑的。
有人有什么想法吗?
谢谢
最佳答案
拍摄4个图像视图[pinImgView1、pinImgView2、pinImgView3、pinImgView4]
还有一个文本字段[pinTextField]。
deleget方法:
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
}
}