【问题标题】:How to create a custom text field via image view in Swift如何通过 Swift 中的图像视图创建自定义文本字段
【发布时间】:2018-08-29 01:20:31
【问题描述】:

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

【问题讨论】:

标签: swift uiimageview swift2 uitextfield


【解决方案1】:

你可以这样做:

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 或者您可以在情节提要中添加。使用明文颜色将UITextField 添加到UIView

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
       }
   }

}

【讨论】:

  • 非常感谢!你能把它转换成 Swift 2.3 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多