自定义 TextField 层/背景/适应使用 swift

Custom TextField layer / background / adapt using swift

我想知道是否可以使用 swift 为文本字段创建自定义背景,例如预期有 4 个字母,文本字段有 4 个正方形。谢谢

你是这个意思吗?

// Background
txtField.backgroundColor = UIColor.greenColor()
// Placeholder
txtField.placeholder = "1"
// Corner radius
txtField.layer.cornerRadius = 8
// A Boolean indicating whether sublayers are clipped to the layer’s bounds
txtField.layer.masksToBounds = true

更新

这是一种随机化数字然后根据已生成的数字创建文本字段的方法。如果您已经有号码,您当然不需要随机功能。您唯一需要做的就是将 var i = 0; i < rand; i++ rand 更改为您的变量。 textFieldEditingChanged 函数是当用户尝试向 textField 添加一个新字符时发生的事件,并且检查每个 textField.

中只允许一个字符
let rand = Int(arc4random_uniform(10) + 2)
for var i = 0; i < rand; i++ {
    let myField: UITextField = UITextField (frame:CGRectMake(CGFloat(i * 30), 50, 25, 25));
    myField.text = String(i)
    myField.backgroundColor = UIColor.redColor()
    myField.addTarget(self, action: "textFieldEditingChanged:", forControlEvents: UIControlEvents.EditingChanged)
    self.view.addSubview(myField)
}

如果你只有一个 String 并且你想填充 textField 中的每个字符,你可以这样做:

let word = "Car"
for var i = 0; i < word.characters.count; i++ {
    let myField: UITextField = UITextField (frame:CGRectMake(CGFloat(i * 30), 50, 25, 25));
    myField.text = String(word[word.startIndex.advancedBy(i)])
    myField.backgroundColor = UIColor.redColor()
    myField.addTarget(self, action: "textFieldEditingChanged:", forControlEvents: UIControlEvents.EditingChanged)
    self.view.addSubview(myField)
}

文本字段的点击事件

func textFieldEditingChanged(target: UITextField){
     if (target.text?.characters.count > 1){
         target.text = target.text?.substringToIndex(target.text!.endIndex.predecessor())
     }
 }

更新 更改响应者

声明一个变量 var tagNumber = 0,当您在 for 语句中循环并创建文本字段时,只需将此行添加到 myField.tag = i。在您的 textFieldEditingChanged 函数中,添加此代码块:

if (target.tag < tagNumber){
       let nextTag: NSInteger = target.tag + 1;
       // Try to find next responder
       if let nextResponder: UIResponder! = 
       target.superview!.viewWithTag(nextTag){
           nextResponder.becomeFirstResponder()
       }
   }