2017-03-11 4 views
0

Ich habe ein Textfeld, das angeklickt werden kann, um zu bearbeiten, und entlang der y-Achse mit einem UIPanGesture gezogen werden.Textfeld klicken und ziehen

Wenn der Benutzer auf das Textfeld klickt, möchte ich die textAlignement to.left & festlegen, wenn der Benutzer das Textfeld umherzieht, möchte ich das Textcenter ausgerichtet halten.

I Initialisierung im viewDidLoad Methode:

let dragText = UIPanGestureRecognizer(target: self, action: #selector(userDragged)) 
    textOverlay.addGestureRecognizer(dragText) 

textOverlay.addTarget(self, action: #selector(textClicked), for: UIControlEvents.touchDown) 

Callback-Methoden:

func textClicked() { 
    //let actLocation = textOverlay.frame.origin.y 
    textOverlay.frame.origin.y = self.finalKBH 
    self.textOverlay.textAlignment = .left 
    print("Text clicked") 
} 

func userDragged(gesture: UIPanGestureRecognizer) { 
    let loc = gesture.location(in: self.view) 
    self.textOverlay.frame.origin.y = loc.y 
    self.textOverlay.textAlignment = .center 
    print("Text dragged") 
} 

Das Problem das ich habe, ist zwischen einer tatsächlichen 'Click-to-edit' und zieht Geste differenzier .

Beim Ziehen des Textfelds wird auch die textClicked-Funktion aufgerufen und der Text wird nach links ausgerichtet.

Gibt es eine Möglichkeit, zwischen diesen beiden Aktionen zu unterscheiden?

Ich habe versucht, die textClicked targer zu UIControlEvents.touchUpInside zu ändern, aber dann wird meine Funktion nicht in der Konsole registriert.

Vielen Dank im Voraus

Antwort

0

zum Erfassen, wenn das Textfeld eines Bearbeitungsmodus wechselt, implementieren die textFieldDidBeginEditing(_:) Methode des UITextFieldDelegate

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    // ... 

    textField.delegate = self 
} 

func textFieldDidBeginEditing(_ textField: UITextField) 
{ 
    print("Text clicked") 
} 
+0

Dies ist eine ordnungsgemäße Verwendung von TextField, ich bin mir nicht sicher über das Overlay obwohl .. – silentBob

0

Vielleicht, lange drücken, wenn Sie eine Überlagerung aus irgendeinem Grunde verwenden?

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:") 
textOverlay.addGestureRecognizer(longPressRecognizer) 
Verwandte Themen