0

我已經做了集合視圖有4個細胞,當你按在小區1按鈕(我還沒有做出其他的細胞還)將採取你到一個叫做「FirstCollectionViewController」的新的ViewController。我有一個pangesturderecognizer顯示滑出菜單時,你在集合視圖刷卡。獲取EXC_BAD_INSTRUCTION(代碼= EXC_1386_INVOP,子碼=爲0x0),因爲PanGesture的迅速

但是,當你在「FirstCollectionViewController」,你想回來到集合視圖,您可以按下左側角落的按鈕了。但是,當我按下它,我將在得到一個EXC_BAD_INSTRUCTION錯誤「self.view.addGestureRecognizer(self.revealViewController()。panGestureRecognizer())」的viewDidLoad中的CollectionViewController內。我試圖把在ViewDidAppear的panGestureRecognizer但同樣的情況

我怎樣才能解決這個問題?

BTW應該送你回集合視圖的SEGUE被稱爲: 「SegueFirstCollectionViewController」

CollectionViewController:

import Foundation 
import UIKit 

class CollectionViewController: UICollectionViewController { 


    var Array = [String]() 
    var ButtonArray = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Array = ["1","2","3","4"] 
     ButtonArray = ["1", "2", "3", "4"] 

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

    } 

    override func viewDidAppear(animated: Bool) { 

    } 


    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return Array.count 
    } 




    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as UICollectionViewCell 


     let Label = cell.viewWithTag(1) as! UILabel 

     Label.text = Array[indexPath.row] 

     let Button = cell.viewWithTag(2) as! UIButton 

     Button.setTitle(ButtonArray[indexPath.row], forState: UIControlState.Normal) 
     // Button.addTarget(self,action:#selector(ButtonArray(_:)), forControlEvents:.TouchUpInside) 
     Button.addTarget(self, action: Selector("ButtonArray:"), forControlEvents:.TouchUpInside) 

     return cell 







    } 
    override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     print("Inside didSelectItemAtIndexPath") 
    } 

     func ButtonArray(sender : UIButton) { 
      print("m") 


      if sender.currentTitle == "1"{ 
      performSegueWithIdentifier("segueFirst", sender: nil) 
      } 

      if sender.currentTitle == "2"{ 

      } 
      if sender.currentTitle == "3"{ 

      } 
      if sender.currentTitle == "4"{ 

      } 

    } 
} 

FirstCollectionViewController:

class FirstCollectionViewController : UIViewController { 

    @IBAction func SegueFirstCollectionViewController(sender: UIButton) { 
     performSegueWithIdentifier("SegueFirstCollectionViewController", sender: nil) 
    } 

} 

回答

0

你missusing塞格斯。 Segues創建其目標ViewController的新實例,這意味着當你啓動你的應用程序時你有1個CollectionViewController,然後你點擊一個單元,你有一個1 CollectionViewController和1 FirstViewController的堆棧,然後你點擊按鈕,喜歡它,你是不是又回到原來的collectionViewController,而是要創建一個新的,這意味着你現在有1 collectionViewController,一個第一的viewController和一個collectionViewController。

這就是爲什麼你reexcecuting viewDidLoad中,這就是爲什麼它會失敗,因爲平移手勢識別已經添加到另一個視圖....

如果你想實現平(推流行/大師 - >細節/後退按鈕......),你應該封裝你collectionViewController在NavigationViewController和使用自由還給按鈕:不處理BACK自己,尤其是SEGUE

PS的確切beeing的緣故,而是對於一個廣告公衆來說:存在一種特殊的繼續處理方式,他們被稱爲放鬆繼續。但是,UINavigationController應始終是平面導航的首選選項。放鬆與垂直導航打交道時賽格瑞發現其使用(模式演示/ OK - 取消)

+0

謝謝你的解釋,但問題是,當我添加一個導航控制器並將其連接到集合視圖(與Relationship'根視圖控制器「)時,我不會得到按鈕或導航欄,當我在FirstCollectionViewController(在模擬器中),但當我在main.storyboard裏面時,我看到了導航欄,但沒有看到按鈕。 –

1

你並不需要獲得在細胞外

製作設定值

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ 
    //set value here 
    if self.currentTitle == "1"){ 
    // 
    } 
    else { 
    //... 
    } 

} 

,並重新加載特定的細胞

let indexPath = IndexPath(item: i, section: 0) 
self.tableView.reloadRows(at: [indexPath], with: .automatic) 

希望它會使幫助你:)

相關問題