2015-08-03 2 views
5

Ich möchte eine Wischgeste verwenden, um zwischen Tab-Leiste-Controller zu navigieren, während die Standard-Tab-Leiste beibehalten. Ich habe diesen Code verwendet, aber einen Fehler angezeigt.möchten zwischen den Tab-Leisten mit swipe gesters in swift navigieren

import UIKit 

class FirstViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     var leftSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:")) 


     leftSwipe.direction = .Left 


     view.addGestureRecognizer(leftSwipe) 
    } 

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

     func handleSwipes(sender:UISwipeGestureRecognizer) { 
      if (sender.direction == .Left) { 

       let storyboard = UIStoryboard(name: "Main", bundle: nil) 
       let vc = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! UIViewController 
       self.presentViewController(vc, animated: false, completion: nil) 

      } 

      if (sender.direction == .Right) { 

      } 
     } 


    } 


} 
+0

zeigen Fehler als "Threa d 1: Signal SIGABRT " –

+0

Entfernen Sie die Funktion handleSwipes aus der Funktion didReceiveMemoryWarning. – AMAN77

Antwort

2

Ihre Funktion handleSwipes muss eine Klasse-Level-Funktion, nicht eine innere Funktion einer anderen Funktion sein:

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

    // remove the func from here 
} 

func handleSwipes(sender:UISwipeGestureRecognizer) { 
    if (sender.direction == .Left) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! UIViewController 
     self.presentViewController(vc, animated: false, completion: nil) 
    } 

    if (sender.direction == .Right) { 

    } 
} 

Das ist die offensichtlichen Fehler, die ich sehen kann. Sie sollten Ihre Fehlermeldung immer mit Ihren Fragen posten, um die Qualität der Antworten zu verbessern.

+1

Fehler als "Thread 1: Signal SIGABRT" zeigen –

0

Sie sollten wahrscheinlich UITabBarControllerDelegate Methoden verwenden, um dies zu erreichen. Es gibt neue Delegate-Methoden für UITabBarControllerDelegate, mit denen Sie UIViewControllerAnimatedTransitioning und UIViewControllerInteractiveTransitioning zurückgeben können.

Dies sind die Delegierten Methoden, die Sie verwenden würden,

- (id <UIViewControllerInteractiveTransitioning>)tabBarController:(UITabBarController *)tabBarController 
         interactionControllerForAnimationController: (id <UIViewControllerAnimatedTransitioning>)animationController; 

- (id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController 
      animationControllerForTransitionFromViewController:(UIViewController *)fromVC 
               toViewController:(UIViewController *)toVC; 

Der Swift-Code für die Delegatmethoden so aussehen,

func tabBarController(tabBarController: UITabBarController, interactionControllerForAnimationController animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? 

func tabBarController(tabBarController: UITabBarController, animationControllerForTransitionFromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 
+0

Ist dies ein schneller Code? , ich bin neu zu schnell, also könntest du mir bitte sagen, wie man obigen Code ändert, damit es funktioniert, Danke !! –

+0

Nein, es ist Ziel C, ich habe es von api-Header. Wenn Sie in UITabViewControllerDelegate schauen, können Sie schnell Code bekommen, ich werde auch schnellen Code hinzufügen. – Sandeep

+0

Bitte aktualisieren Sie den Swift-Code :) Vielen Dank im Voraus –

1

ich Ihren Code arbeiten bekommen konnte, indem Sie die ID zu die SecondViewController-Klasse wie im Bild unten gezeigt:

enter image description here

Das einzige Problem ist, dass Sie den Tab-Bar-Controller nicht sehen können, nachdem Sie dies getan haben, da Sie den SecondViewController geöffnet haben, der nicht über den UI-Tab-Bar-Controller verfügt.

Bitte lassen Sie mich wissen, ob meine Lösung funktioniert und haben Sie eine andere Möglichkeit gefunden, zur zweiten Ansicht zu wischen und die UI-Registerkartenleiste ebenfalls zu verwenden.

[EDIT] Eigentlich grub ich ein bisschen mehr und fand heraus, dass es einfacher war als ich erwartet hatte. Das Update für unser Problem von tabBar Controller nicht der Fall zeigt sich wie folgt zusammen:

func handleSwipes(sender:UISwipeGestureRecognizer) { 
     let selectedIndex: Int = self.tabBarController!.selectedIndex 
     self.tabBarController!.selectedIndex = selectedIndex + 1 
} 
+0

Danke! Ich werde dieses versuchen :) –

+0

Korrektur hinzugefügt, dass der Tab-Bar-Controller nach dem Wischen zu SecondViewController nicht angezeigt wird. Dies ist eine allgemeinere Lösung. Lass es mich wissen, wenn du mehr Hilfe brauchst. – user2946704

+0

@Chathuranga: Bitte markieren Sie diese Frage als beantwortet und einmal die Lösung, wenn es für Sie funktioniert :) – user2946704

1

Der beste Weg für UITabBarViewController (Swift 3.0) wird nächste:

func handleSwipes (Sender: UISwipeGestureRecognizer) {

if sender.direction == UISwipeGestureRecognizerDirection.left { 

     self.selectedIndex += 1 

    } else if sender.direction == UISwipeGestureRecognizerDirection.right { 

     self.selectedIndex -= 1 
    } 

} 
+0

Wenn Sie diese Route gehen wollen, sollten Sie zumindest überprüfen, ob der Index innerhalb der Grenzen liegt (> = 0 und Mark

0

Kopie ad fügen Sie diesen

class SwipeGesture: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let left = UISwipeGestureRecognizer(target: self, action: #selector(swipeLeft)) 
     left.direction = .left 
     self.view.addGestureRecognizer(left) 

     let right = UISwipeGestureRecognizer(target: self, action: #selector(swipeRight)) 
     right.direction = .right 
     self.view.addGestureRecognizer(right) 

    } 

    @objc func swipeLeft() { 
     let total = self.tabBarController!.viewControllers!.count - 1 
     tabBarController!.selectedIndex = min(total, tabBarController!.selectedIndex + 1) 

    } 

    @objc func swipeRight() { 
     tabBarController!.selectedIndex = max(0, tabBarController!.selectedIndex - 1) 
    } 


} 
Verwandte Themen