如何通过Swift中的图像视图创建自定义文本字段

时间:2018-03-20 09:34:14

标签: swift uiimageview swift2 uitextfield

我正在尝试将键盘输入显示在框中(如图所示),并且仍然能够将输入读取为一个,而不是4个不同的输入。这些框是图像视图,我想将它们转换为一个文本字段。

Example

1 个答案:

答案 0 :(得分:0)

你可以这样做:

1)创建UIView或UITableViewCell类:

class ConfirmTableViewCell: UITableViewCell {

   @IBOutlet weak var symbolsTextField: UITextField!
   @IBOutlet weak var firstLabel: UILabel!
   @IBOutlet weak var secondLabel: UILabel!
   @IBOutlet weak var thirdLabel: UILabel!
   @IBOutlet weak var fourthLabel: UILabel!

   var code: String = ""

   override func awakeFromNib() {
       super.awakeFromNib()

       symbolsTextField.delegate = self
       symbolsTextField.becomeFirstResponder()

       resetContent()
   }

   func resetContent() {
       firstLabel.text = nil
       secondLabel.text = nil
       thirdLabel.text = nil
       fourthLabel.text = nil
   }
}

2)添加xib或者您可以在storyboard中执行此操作。使用明文颜色将UITextField添加到UIViewenter image description here

3)添加扩展名:

extension ConfirmTableViewCell: UITextFieldDelegate {

   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

       if range.location > 3 {
           textField.text?.removeLast()
       }

       setupLabels(character: string, range: range)

       return true
   }

   func setupLabels(character: String, range: NSRange) {
       if range.location > 3 {
           self.code.removeLast()
       }

       if range.length == 0 {
           self.code += character
       } else {
           self.code.removeLast()
       }

       var codeString: String = self.code

       if let symbol = codeString.first {
           firstLabel.text = String(symbol)
           codeString.removeFirst()
       } else {
           firstLabel.text = nil
       }

       if let symbol = codeString.first {
           secondLabel.text = String(symbol)
           codeString.removeFirst()
       } else {
           secondLabel.text = nil
       }

       if let symbol = codeString.first {
           thirdLabel.text = String(symbol)
           codeString.removeFirst()
       } else {
           thirdLabel.text = nil
       }

       if let symbol = codeString.first {
           fourthLabel.text = String(symbol)
       } else {
           fourthLabel.text = nil
       }
   }

}