2014-07-11 14 views
5

Używam "wtyczki" SWRevealViewController do pomocy w tworzeniu paska bocznego w mojej aplikacji. Teraz w Objective-C, można kontrolować pasek boczny za pomocą następującego kodu:Implementacja SWRevealViewController w Swift

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

Gdzie sidebarButton została podłączona UIBarButtonItem i IBOutlet. Teraz próbuję zastosować to do mojego kodu Swift i mam mieszany sukces.

Ustawiłem przycisk @IBOutlet var. Teraz próbowałem zarówno UIBarButtonItem i UIButton. Kiedy próbuję UIBarButtonItem, użyłem następującej linii:

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

Jednak to nic nie robi i przycisk nie działa. Jednakże, jeśli przycisk SET, aby być UIButton i zaczepić to z następujących powodów:

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

Działa przesuwać pasek się i ale nie poprzez gesty. Problem polega na tym, że nie mogę dodać UIButtonu do paska narzędzi (i tak w StoryBoard).

Czy istnieje sposób na prawidłowe wdrożenie? Dodatkowo, czy jest możliwe dodanie także funkcji rozpoznawania gestów?

Dzięki

EDIT

Ok udało mi się dostać pracę gest przełączania, chociaż myślę, że moja metoda jest trochę za długa zdyszany:

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) 

Więc proszę poprawić .

+0

Jakaś pomoc z tym? – Prateek

+0

Witaj. Mam ten sam problem z gestem. Próbowałem Twojego rozwiązania, ale nie wygląda dobrze. Czy znalazłeś inny sposób na zrobienie tego? Dzięki. –

+1

Znalazłem lepsze rozwiązanie do dołączania gestów. Umieść go na swoim wierzchu ViewController. self.view.addGestureRecognizer (self.revealViewController(). panGestureRecognizer()); –

Odpowiedz

2

Dzięki Slavik Voloshyn, chociaż próbowałem tego wcześniej i to nie działa, najlepszym sposobem jest:

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

6

dla UIBarButtonItem to działa

@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

pomoże ci, jeśli potrafisz wyjaśnić, dlaczego ten fragment kodu powinien być rozwiązaniem. – IgnazioC

0

SWRevealViewController to kontroler widoku bocznego inspirowany stylem facebookowym napisanym w Objective-C. Tutaj pokażę ci, jak możesz użyć tego w swojej szybkiej aplikacji. Postępujemy zgodnie z tym procesem w Oodles Technologies.

struct Bird{ 
    var name:String! 
} 

Zmień następujące metody zajęć, jak pokazano poniżej.

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 
    } 

Zaznacz komórkę w TableViewController z głównych ujęć i zmienić swój identyfikator za pomocą atrybutów inspektora myCell.

Dokonaj delegacji, źródła danych tego TableViewController do siebie, klikając prawym przyciskiem myszy na tabeli i przeciągnij do żółtej ikony nad kontrolerem widoku tabeli i wybierz delegata i źródło danych jeden po drugim.

Dodaj przycisk do innego kontrolera widoku, który jest teraz MainViewController w lewym górnym rogu tego widoku i otwórz MainViewController.przechodź obok siebie za pomocą Edytora asystenta i utwórz ujście nazwane menuButton w pliku SWIFT.

Dodaj następujący kod w viewDidLoad z klasy MainViewController.

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

Uruchom i przetestuj aplikację.