2016-01-19 50 views
0

每次viewWillAppear它都會調用 self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 添加手勢識別器。如何只添加一次view.addGestureRecognizer一次?

如何檢查我是否尚未添加識別器? 我知道我可以將它移動到viewDidLoad,但這不是我想要的。

回答

0

1)您可以添加布爾屬性來檢測viewWillAppear調用前

2)您可以在屬性存儲添加手勢識別,如果它是不nil不要再添加它

3)您可以刪除已添加的手勢識別在viewWillDisappear/viewDidDisappear

2

您可以檢查的手勢實例存在類似如下

self.view.gestureRecognizers?.contains(yourgestureInstance) 

self.view.gestureRecognizers給出已添加到視圖中的所有gestureRecognizers的數組。

1

viewWillAppear:每當viewController進入屏幕時都會調用everyTime。

viewDidLoad:只會被調用一次。

如果您不想在這種情況下將代碼移動到viewDidLoad:,請在您的ViewController中添加一個布爾變量。

delcare isRevealPanGastureAdded變量的viewDidLoad:

var isRevealPanGastureAdded : Bool = false 

外,在以下代碼viewWillAppear:寫入。

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated); 

     //this will be called only once     
     if self.isRevealPanGastureAdded == false { 
     self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
     self.isRevealPanGastureAdded = true; 
     } 
    }