2016-08-24 1 views
2

Ich legte eine kleine UIView in einem UITableViewCell.iOS: Klicken Sie auf eine Ansicht in einem TableCellView

  • Bei einem Klopfen auf so UIView, würde Ich mag ein Popup öffnen.
  • Bei einem Klopfen außerhalb so UIView, ich möchte was ausführen es in der UITableViewDidSelectRowAtIndexPath“ Funktion definiert ist.

Was es im Moment geschieht, ist, dass, wenn ich auf die Ansicht klicken beiden Dinge passieren: das Popup geöffnet und die „DidSelectRowAtIndexPath“ Funktion trigged wird.

Wie kann ich sicherstellen, dass, wenn ich auf dieser UIView die „DidSelectRowAtIndexPath“ klicken Funktion ausgelöst wird nicht?

aktuelle Implementierung:

definierte ich ein UITapGestureRecognizer für die UIView in meiner benutzerdefinierten UITableViewCell Klasse.

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyCustomTableViewCell.clickOnHelp(_:))) myClickAreaUIView.addGestureRecognizer(tapGesture)

+2

kann ich Super schlagen die UIView zu einem UIButton und behandeln die Berührung mit einem touchUpInside auf die Schaltfläche ändern? – ddb

+1

Wo und wie gehen Sie mit der Ansicht auf dem Bildschirm um? – Miknash

+1

Ich denke, es gibt eine Möglichkeit, Ansichten einzurichten, um ihre Berührungsereignisse nicht weiterzuleiten. Ich denke Buttons tun das standardmäßig, aber Dinge wie Views nicht. – nhgrif

Antwort

1
tun

Die beste Lösung, die ich vorschlage, ist, die UIView in eine UIButton zu ändern und die Berührung mit einer touchUpInside auf der Schaltfläche zu behandeln.

diese Weise können Sie Ihr Ziel erreichen, als UIButton verhindert automatisch Berührungsereignisweiterleitung

0

Versuchen Sie, die innere Ansicht des exclusiveTouch Eigenschaft auf true Einstellung.

cell.tapView.exclusiveTouch = true 
+0

Ich habe gerade versucht, die 'didSelectRowAtIndexPath' noch ausgelöst wird –

-1

nur diesen Code innerhalb cellForRowAtIndexPath() schreiben für gelegt haben, verhindern ::

cell.selectionStyle = UITableViewCellSelectionStyle.None 
+2

didSelectRowAtIndexPath muss auch funktionieren, wenn der Benutzer außerhalb tippen die Unteransicht, sind Sie sicher, dass es weiter funktioniert? – ddb

0

Ich schlage vor, die folgende Methode von UIGestureRecognizerDelegate wie zu implementieren unter

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
    print("in shouldReceiveTouch") 
    gestureRecognizer.delegate = self 
    if ([...]){ // touch location is in the UIView 
     print("touching UIView") 
     return false // prevent from forwarding touch to superview 
    } else { 
     println("touching elsewhere") 
     return true 
    } 
} 
+0

Hallo ddb!Ich löste das Problem, indem ich die UIView in eine UIButton änderte und die Berührung mit einem TouchUpInside auf der Schaltfläche behandelte. Wenn Sie eine Antwort darauf schreiben, werde ich es als die richtige Antwort auf dieses Problem akzeptieren. Danke vielmals! –

+0

@DanielB, bearbeitet, danke! – ddb

+0

könnten Sie eine andere Antwort schreiben, wo Sie diese Lösung allein angeben? Mit der Annahme dieser Antwort würde ich auch den ersten Teil akzeptieren, den ich nicht überprüft habe. –

0

Sie diese verwenden sollten Methode von UIGestureRecognizerDelegate

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return false 
} 
0

erstellen Custom für Ihren UIViewCustomView vom Typ UIView

Ihre UIView ist diese Funktion

@IBOutlet zu konformen tableViewCell vom Typ Custom

In Custom Klasse Call Connect sagen lässt

override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { 
    super.pointInside(point, withEvent: event) 

    return CGRectContainsPoint(self.bounds, point) 
} 

Dies wird Ihnen sagen, ob der Ort, an dem angezapft Benutzer innerhalb dass UIView Grenzen oder nicht enthalten war, wenn es wahr kehrt in Ihrem UIGestureRecognizer Funktionen tun Pop-up und https://stackoverflow.com/a/18606840/6297658 folgen, wenn falsch das Gegenteil

+0

Ich freue mich auf eine Lösung für Ihr Problem, ich könnte es nicht überprüfen, das würde bedeuten, eine ganz neue App zu schreiben, aber hat das funktioniert? – Dravidian

Verwandte Themen