2016-08-04 23 views
0

Mein ideales Szenario ist, dass, wenn ich die Taste mit dem Namen "1"/ButtonArray.index[0] drücken würde es einen segue (Die Segment-ID ist "segueFirst") auf die andere UIViewController namens "FirstCollectionViewController ". Aber nichts passiert, wenn ich den Knopf drücke.Mein Segment oder Tasten funktioniert nicht in swift

Nun, ich weiß nicht, ob es etwas mit dem Übergang zu tun hat, was ich bezweifle. Ich denke, es hat etwas mit den Tasten zu tun, aber ich kann es nicht herausfinden.

PS: Innerhalb der ButtonArray-Funktion (die das Segment auslösen soll) habe ich versucht performSegueWithIdentifier aber nichts passiert, wenn ich die Taste drücke.

Ich habe auch versucht presentViewController aber es gibt mir diesen Fehler

Wert kann nicht vom Typ „FirstCollectionViewController.Type“ zu erwarten Argument Typ „UIViewController“

umwandeln, die ich nicht verstehe, weil ich es als ViewController deklariert habe (In "The new VC").

VC1:

 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"] 


      } 

      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: "ButtonArray", forControlEvents:.TouchUpInside) 
       return cell 

      } 

      func ButtonArray(sender : UIButton) { 
      print("Not the function") 
       var selectedButtonCell = sender.superview as! UICollectionViewCell 

       var indexPath = collectionView?.indexPathForCell(selectedButtonCell) 
       if indexPath?.row == 0 { 
print("Not the if-statement") 
        // presentViewController(FirstCollectionViewController, animated: true, completion: nil) 
        // performSegueWithIdentifier("segueFirst", sender: nil) 
       } 
      } 
    } 

Der neue VC:

import UIKit 
import Foundation 
    class FirstCollectionViewController : UIViewController { 

     override func viewDidLoad() { 
      print("hey") 
     } 
    } 

Antwort

0

Sie haben vergessen Ziel mit Ihrem Button im cellForItemAtIndexPath, Fügen Sie diese Zeile nach dem setTitle Methode von Button

hinzufügen
Button.addTarget(self,action: Selector("ButtonArray:"), forControlEvents: .TouchUpInside) 

Ich denke, das Problem ist möglicherweise Ihre Schaltfläche Frame ist zu klein, so versuchen didSelectItemAtIndexPath Methode UICollectionViewDelegate Methode, setzen Sie auch Ihre CollectionView Delegate mit Ihrem ViewController, wenn es nicht festgelegt ist, und überprüfen, dass es ruft didSelectItemAtIndexPath oder nicht.

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

Okay, ich habe versucht, was Sie gebeten, aber ich habe einige Fehler wie "Expected Separator" so dass ich es auf "Aktion: "ButtonArray"" statt „Aktion: #selector (ButtonArray (_ :)) ". Aber die Sache ist, dass es immer noch nicht die Aktion auslöst, wenn ich es drücke. Ich habe 2 print-Anweisungen platziert, um zu sehen, ob es die Schaltfläche, die ButtonArray-Funktion oder die if-Anweisung ist Es ist entweder die Schaltfläche oder ButtonArray-Funktion, aber ich weiß nicht, wie es zu beheben :( –

+0

Überprüfen Sie meine Bearbeitung für Selektor-Syntax und für andere Details. –

+0

Wenn ich alle Codezeilen in meinem '' func ButtonArray auskommentiert '' außer meinen print-Anweisungen (weil ich einen SIGABRT-Fehler bei '' var selectedButtonCell = sender.superview als! UICollectionViewCell '' bekommen habe, worüber ich später noch eine weitere Frage stellen könnte) und die Anweisungen in der ButtonArray-Funktion ausgedruckt hat dass die Tasten funktionieren! Es hat nicht das "Inside didSelectItemAtIndexPath" ausgedruckt, aber mein Hauptproblem wurde dank Ihnen gelöst! –