2014-07-11 12 views
5

Sto utilizzando il "plugin" SWRevealViewController per aiutare a produrre una barra laterale nella mia app. Ora in Objective-C, è possibile controllare la barra laterale utilizzando il seguente codice:Implementazione di SWRevealViewController in Swift

[self.sidebarButton setTarget: self.revealViewController]; 
     [self.sidebarButton setAction: @selector(revealToggle:)]; 
     [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 

Dove sidebarButton è stato collegato UIBarButtonItem e IBOutlet. Ora sto cercando di applicare questo al mio codice Swift e ho avuto un successo misto.

Ho impostato un pulsante var @IBOutlet. Ora ho provato sia UIBarButtonItem che UIButton. Quando provo UIBarButtonItem, ho usato la seguente linea:

button = UIBarButtonItem(barButtonSystemItem: .Add, target: self.revealViewController(), action: "revealToggle:") 

Tuttavia, questo non fa nulla e il pulsante non funziona. Tuttavia, se il pulsante ho impostato per essere un UIButton e aggangiarlo con il seguente:

button.addTarget(self.revealViewController(), action:"revealToggle:", forControlEvents:UIControlEvents.TouchUpInside) 

Questo funziona per scorrere la barra fuori e in, ma non tramite gesti. Il problema è che non riesco ad aggiungere un UIButton alla barra degli strumenti (in StoryBoard comunque).

Quindi esiste un modo per implementarlo correttamente? Inoltre, è possibile aggiungere anche il riconoscitore di gesti?

Grazie

EDIT

Ok sono riuscito a far funzionare il gesto ginocchiera, anche se penso che il mio metodo è un po 'lungo senza fiato:

var swipeRight = UISwipeGestureRecognizer(target: self.revealViewController(), action: "revealToggle:") 
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right 
    self.view.addGestureRecognizer(swipeRight) 

    var swipeLeft = UISwipeGestureRecognizer(target: self.revealViewController(), action: "revealToggle:") 
    swipeLeft.direction = UISwipeGestureRecognizerDirection.Left 
    self.view.addGestureRecognizer(swipeLeft) 

Quindi, per favore correggere .

+0

Qualsiasi aiuto con questo? – Prateek

+0

Ciao. Ho lo stesso problema con il gesto. Ho provato la tua soluzione ma non sembra buona. Hai trovato un altro modo per farlo? Grazie. –

+1

Ho trovato una soluzione migliore per attaccare il gesto. Mettilo sul ViewController anteriore. self.view.addGestureRecognizer (self.revealViewController() panGestureRecognizer().); –

risposta

2

Grazie a Slavik Voloshyn, anche se ho provato questo prima e non ha funzionato, il metodo migliore è:

self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());

6

per l'UIBarButtonItem questo funziona

@IBOutlet weak var sideButton: UIBarButtonItem! 

@IBAction func sideButtonPress(sender: UIBarButtonItem) { 
     revealViewController().revealToggle(sender) 
} 
1
@IBOutlet weak var menu: UIBarButtonItem! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if self.revealViewController() != nil { 
     menu.target = self.revealViewController() 
     menu.action = "revealToggle:" 
     self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
    } 
} 
+0

sarà d'aiuto se riesci a spiegare perché questa parte di codice dovrebbe essere la soluzione. – IgnazioC

0

SWRevealViewController è un controller di vista laterale ispirato allo stile di menu di Facebook scritto in Objective-C. Qui ti mostrerò come puoi usarlo nella tua applicazione basata su swift. Seguiamo questo processo in Oodles Technologies.

struct Bird{ 
    var name:String! 
} 

Modificare i seguenti metodi della classe come mostrato di seguito.

override func viewDidLoad() { 
     super.viewDidLoad() 
     birds.append(Bird(name: "Pigeon")) 
     birds.append(Bird(name: "Crow")) 
     birds.append(Bird(name: "Peacock")) 
     birds.append(Bird(name: "Duck")) 
     birds.append(Bird(name: "Parrot")) 
     birds.append(Bird(name: "Eagle")) 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return birds.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell 
     cell.textLabel?.text = birds[indexPath.row].name 
     // Configure the cell... 

     return cell 
    } 

Selezionare la cella in TableViewController da storyboard principale e modificare il suo identificatore utilizzando attributi ispettore mycell.

Rendere delegato, origine dati di questo TableViewController a sé facendo clic destro sulla tabella e trascinare sull'icona gialla sopra il controller di visualizzazione tabella e selezionare delegato e origine dati uno per uno.

Aggiungere un pulsante all'altro controller di vista che ora è MainViewController nell'angolo in alto a sinistra di questa vista e aprire MainViewController.veloce come affiancato usando Assistant Editor e crea una presa denominata menuButton nel file rapido.

Aggiungere il codice follwing in viewDidLoad della classe MainViewController.

menuButton.addTarget(self.revealViewController(), action: "revealToggle:", forControlEvents: UIControlEvents.TouchUpInside) 

Eseguire e testare l'app.

Problemi correlati