移动以编程方式创建的 UItTextFields

Moving programmatically created UItTextFields

我正在尝试利用 panGestureRecogniser 让我的第一个应用程序的用户能够移动以编程方式创建的文本字段。搜索解决方案后,我只找到了 IBOutlets 的过时代码。问题是我很难将新创建的文本字段的位置设置为用户拖动到的位置。当我在通过 IBOutlet 连接的情节提要中创建的文本字段上测试我的代码时,一切正常。我的问题是如何在 didPan 函数的位置与 generateTextField 函数创建的任何新标签之间建立连接。另一件事是我希望 mu 用户能够创建许多文本字段并且每个文本字段都应该是可拖动的,因此任何解决方案都应该包括它。我在下面粘贴我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

}

func generateTextField() {

    let textPanel = UITextField(frame: CGRect(x: 50, y: 50, width: 100, height: 30))
    textPanel.textAlignment = NSTextAlignment.center
    textPanel.textColor = UIColor.blue
    textPanel.borderStyle = UITextBorderStyle.line
    self.view.addSubview(textPanel)

    let gest = UIPanGestureRecognizer(target: self, action: #selector(didPan))

    textPanel.isUserInteractionEnabled = true
    textPanel.addGestureRecognizer(gest)

}

@objc func didPan(sender: UIPanGestureRecognizer){

    let location = sender.location(in: view)

    if sender.state == .began {
        print("Gesture began")
    } else if sender.state == .changed {
        print("Gesture is changing")
    } else if sender.state == .ended {
        print("Gesture ended")
    }
}


@IBAction func generateTextFieldPressed(_ sender: Any) {
    generateTextField()
}

didPan 中,您可以从识别器中检索文本字段,例如:

let textField = sender.view as TextField

然后更改 textField 的框架。