2016-05-14 7 views
3

implementieren Ich habe eine Tabelle mit 3 statischen Zellen, jede Zelle enthält eine Unteransicht mit Etiketten den gewünschten Text anzeigen, was ich erreichen möchte, ist die Ausrichtung programmatisch von Portrait drehen in Landscape, wenn der Benutzer auf eine der 3 Untersichten klickt.Wie man eine TAP-Geste Erkenner für mehrere Unteransichten mit Swift

Ich habe es für die erste Unteransicht funktioniert. Wenn ich jedoch versuche, den anderen Unteransichten denselben Tap-Gestenerkenner hinzuzufügen, funktioniert er immer noch nur für eine Unteransicht. Bitte beraten, was fehlt mir? Danke für jede Eingabe.

Porträt:

enter image description here

Landschaft

enter image description here

Tabelle View-Controller-Code:

import UIKit 

class SampleTableViewController: UITableViewController { 

    @IBOutlet weak var newYorkViewWrapper: UIView! 
    @IBOutlet weak var sanFranciscoViewWrapper: UIView! 
    @IBOutlet weak var chicagoViewWrapper: UIView! 

    //Vars 
    let tapRec = UITapGestureRecognizer() 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     print("Sample view rendered.") 


     //Tap gesture 
     tapRec.addTarget(self, action: "tappedView") 
     newYorkViewWrapper.addGestureRecognizer(tapRec) 
     newYorkViewWrapper.userInteractionEnabled = true 
     sanFranciscoViewWrapper.addGestureRecognizer(tapRec) 
     sanFranciscoViewWrapper.userInteractionEnabled = true 
     chicagoViewWrapper.addGestureRecognizer(tapRec) 
     chicagoViewWrapper.userInteractionEnabled = true 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    //-------------------------------------------------------- 
    // MARK: Hide status bar 
    //-------------------------------------------------------- 
    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 

    func tappedView(){ 
     let value = UIInterfaceOrientation.LandscapeLeft.rawValue 
     UIDevice.currentDevice().setValue(value, forKey: "orientation") 
    } 

    //-------------------------------------------------------- 
    // MARK: View Orientation method 
    //-------------------------------------------------------- 
    override func shouldAutorotate() -> Bool { 
     return true 
    } 


} 

Antwort

0

Ich löste mein eigenes Problem, indem ich vier separate UITapGestureRecognizer() - Variablen wie unten gezeigt definierte und dann den entsprechenden Gestenerkenner der entsprechenden Ansicht hinzufügte.

Ich bin jetzt in der Lage, jede einzelne Ansicht zu tippen und die Ausrichtung wird programmatisch von Hochformat zu Querformat drehen.

+0

Beachten Sie, dass Sie Gestenerkenner in Storyboards oder Xib-Dateien hinzufügen und sie dort verbinden können (indem Sie sie mit Ansichten verbinden und das Ziel/die Aktion verbinden). Auf diese Weise benötigen Sie keinen benutzerdefinierten Code. –

2

wenn ich versuche, den gleichen Tap Gestenerkenner zu dem anderen Subviews es nach wie vor nur für ein Subview arbeitet hinzufügen

Sie haben Ihre eigene Frage beantworten schön. Sie können dies nicht tun:

newYorkViewWrapper.addGestureRecognizer(tapRec) 
    sanFranciscoViewWrapper.addGestureRecognizer(tapRec) 
    chicagoViewWrapper.addGestureRecognizer(tapRec) 

Stattdessen müssen Sie drei verschiedene Tippgeste Erkenner machen und eine auf jeder Ansicht hinzuzufügen.

1

Wie Matt sagt, funktioniert eine Gestenerkennung nur mit einer einzigen Ansicht. Der einzige Weg, wie Sie einen Tap-Gesten-Erkenner mit mehreren Ansichten arbeiten können, wäre, ihn an die Superansicht anzuhängen und dann zusätzlichen Code zu schreiben, der herausfindet, welche Ihrer Unteransichten (falls vorhanden) betroffen ist. Das ist normalerweise mehr Mühe als es wert ist, und Sie sind besser dran, einfach eine separate Gestenerkennung für jede Ansicht zu erstellen.

Wenn ich gefunden habe, wo es nützlich ist, eine Gestenerkennung an die Superview anzuhängen, lässt der Benutzer auf eine Ansicht tippen, wer gerade animiert wird. Gestenerkennung erkennt keine Positionsanimation, Sie müssen das also selbst tun.