2015-08-03 9 views
5

Desidero utilizzare un gesto di scorrimento per navigare tra i controller della barra delle linguette mantenendo le barre delle schede predefinite. Ho usato questo codice ma mostra un errore.desidera spostarsi tra le barre delle schede utilizzando i gesti di scorrimento in rapido

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

come "Threa d 1: signal SIGABRT " –

+0

Rimuovi la funzione handleSwipes dall'interno della funzione didReceiveMemoryWarning. – AMAN77

risposta

2

La funzione handleSwipes deve essere una funzione di livello di classe, non una funzione interna di un'altra funzione:

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) { 

    } 
} 

Questo è l'errore ovvio che posso vedere. Dovresti sempre pubblicare il tuo messaggio di errore con le tue domande per migliorare la qualità delle risposte.

+1

visualizza l'errore come "Thread 1: signal SIGABRT" –

0

Probabilmente dovresti usare i metodi UITabBarControllerDelegate per fare ciò. Esistono nuovi metodi delegati su UITabBarControllerDelegate che consente di restituire UIViewControllerAnimatedTransitioning e UIViewControllerInteractiveTransitioning.

Questi sono i metodi delegato che si usa,

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

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

Il codice Swift per il delegato metodi simile a questa,

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

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

Is This è un codice swift? , sono nuovo di swift, quindi potresti dirmi come modificare il codice sopra per farlo funzionare, grazie !! –

+0

No, è Objective C, l'ho preso da un'intestazione api. È possibile ottenere il codice rapido se si guarda in UITabViewControllerDelegate, aggiungerò anche il codice rapido. – Sandeep

+0

si prega di aggiornare il codice rapido :) Grazie in anticipo –

1

ho potuto ottenere il codice di lavoro aggiungendo l'ID di classe SecondViewController come mostrato nella figura:

enter image description here

L'unico problema è che, dopo averlo fatto funzionare, non sarà possibile vedere il controller della barra di Tab, dal momento che è stato aperto il SecondViewController che non ha il controller della barra della scheda UI.

Per favore fatemi sapere se la mia soluzione funziona e avete trovato un altro modo per passare alla seconda visualizzazione e avere anche la barra della scheda dell'interfaccia in atto.

[EDIT] In realtà ho scavato un po 'di più e ho scoperto che era più facile di quanto mi aspettassi. La correzione al nostro problema di controllo TabBar non presentandosi è la seguente:

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

Grazie! Proverò questo :) –

+0

Aggiunta correzione per il controller della barra delle schede non visualizzata dopo il passaggio a SecondViewController. Questa è una soluzione più generica. Fammi sapere se hai bisogno di più aiuto su questo. – user2946704

+0

@Chathuranga: Si prega di contrassegnare questa domanda come risposta e uno su la soluzione, se ha funzionato per voi :) – user2946704

1

Il modo migliore per UITabBarViewController (Swift 3.0) sarà la prossima:

handleSwipes func (mittente: UISwipeGestureRecognizer) {

if sender.direction == UISwipeGestureRecognizerDirection.left { 

     self.selectedIndex += 1 

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

     self.selectedIndex -= 1 
    } 

} 
+0

Se si vuole andare questa rotta, si dovrebbe almeno controllare se l'indice è entro i limiti (> = 0 e Mark

0

copia dell'annuncio incolla questo errore spettacolo

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) 
    } 


} 
Problemi correlati