Im Batman
Im Batman

Reputation: 1876

TextField Draggable in Swift iOS

I want to drag textField around my view. but im having small problem with my code.

here my code

   override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

        var touch : UITouch! = touches.first as! UITouch

        location = touch.locationInView(self.view)

        bottomTextField.center = location
    }

    override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {

        var touch : UITouch! = touches.first as! UITouch

        location = touch.locationInView(self.view)

        bottomTextField.center = location
    }

Problem is if i tried to touch on the TextField and drag then it doesn't work. but if i just touch somewhere else and drag my finger then TextField start to drag. i want t make it only if i touch on that textFiel.

Upvotes: 4

Views: 4831

Answers (2)

nico
nico

Reputation: 73

If it helps anyone, following is an updated working version of the accepted answer for swift 4.0 and 5.0

override func viewDidLoad() {
    super.viewDidLoad()

    //Draggable textfields
    let gesture = UIPanGestureRecognizer(target: self, action: #selector(userDragged(gesture:)))

    bottomTextView.addGestureRecognizer(gesture)
            bottomTextView.isUserInteractionEnabled = true

}

@objc func userDragged(gesture: UIPanGestureRecognizer){
    let loc = gesture.location(in: self.view)
    self.bottomTextView.center = loc

}

Upvotes: 2

Kyle H
Kyle H

Reputation: 921

You can achieve this by adding a gesture to the text field:

override func viewDidLoad() {
    super.viewDidLoad()


    var gesture = UIPanGestureRecognizer(target: self, action: Selector("userDragged:"))
    bottomTextField.addGestureRecognizer(gesture)
    bottomTextField.userInteractionEnabled = true
}

func userDragged(gesture: UIPanGestureRecognizer){
    var loc = gesture.locationInView(self.view)
    self.bottomTextField.center = loc

}

Upvotes: 9

Related Questions