2016-06-18 3 views
0

habe ich eine Datei „Util.swift“ genannt und es hat eine Klasse „Klasse VC: UIViewController“ und verfügt über eine 2-Funktionen:Cant Verwendung Funktionen in einer Datei in einem anderen

Next(segue: String) { 
    performSegueWithIdentifier(segue, completion: nil) 
} 

Back() { 
    dismissViewControllerAnimated(true, completion: nil) 
} 

Also im Grunde die Funktionen Sagen Sie dem aktuellen viewController, um zur nächsten Ansicht zu gelangen oder zur vorherigen Ansicht zurückzukehren.

jedoch in einer anderen Datei, habe ich eine IBAction, die mit einem Knopf verbunden ist und in dieser Aktion, die ich die Funktion aufrufen „Zurück“ in der Util-Datei, indem Sie diese:

@IBACTION func ~~~ { 
    nextVC = Util() 
    nextVC.back() 
} 

Allerdings, wenn ich Klicken Sie auf die Schaltfläche, es tut nichts.

Wenn ich versuche, eine andere Schaltfläche mit einer Aktion zu verbinden, die die "next" -Funktion in der Util-Datei aufruft, indem ich dasselbe mache und den segue indetifier -Parameter eingibt, wird SIGABRT error: no segue identifier "xxx" .

Kann mir jemand helfen? Soll ich einfach XIB verwenden und keine Übergänge verwenden?

+0

, warum Sie diese Funktionen in einer anderen Klasse setzen? Der Grund dafür, dass der Abschnitt nicht gefunden werden kann, besteht darin, dass Sie Util nur mithilfe eines Initialisierers und nicht aus einem Storyboard erstellen, sodass keine Verbindung zum Storyboard besteht. – Paulw11

+0

@ Paulw11, sollten Sie Ihren Kommentar ein wenig ausdrücken und es als Antwort posten. –

Antwort

0

Sie müssen die UIViewController entweder mit storyBoard oder mit XIB initialisieren. Wenn Sie mit der Fabrik init() Methode tun, dann tut es nichts für Sie; das heißt, das ist kein viewController, der entweder mit storyBoard oder XIB verbunden ist. Alles, was Sie tun müssen, ist den ViewController mit beiden Optionen zu instanziieren. Vorher müssen Sie eine identifier für die viewController setzen, um es zu instanziieren.

let storyBoard = UIStoryBoard(name: "MainStoryBoard", bundle: nil) 
let vc = storyBoard.instanstiateViewControllerWithIdentifier("YOUR_IDENTIFIER") as! Util 
//call your Next method like this 
vc.Next(segue:"identifier") 

Bitte beachten Sie das Dokument Apple Doc

0

Um segues zu verwenden, muss die View-Controller-Instanz mit einem Storyboard zugeordnet werden. Um mit einem Storyboard verknüpft zu werden, muss eine View-Controller-Instanz entweder das Ergebnis eines Segments sein oder über ein Storyboard über instantiateViewControllerWithIdentifier instanziiert sein.

Wenn Sie eine Instanz von Util über Util() erstellen, verfügen Sie über eine View Controller-Instanz, die keinem Storyboard zugeordnet ist und nicht auf dem Bildschirm angezeigt wird.

Als Ergebnis erhalten Sie einen Fehler, wenn Sie versuchen, ein Segment auszuführen, da das Segment nicht gefunden werden kann.

Wenn Sie versuchen, den View-Controller in back() zu löschen, versuchen Sie, einen View-Controller zu schließen, der nicht angezeigt wird.

Ich bin nicht sicher, warum Sie zwei ziemlich einfache Funktionen innerhalb next und back wickeln wollen, aber Sie können dies eine übergeordnete Klasse für alle Ihre Ansicht-Controller verwenden tun und haben diese Super Ihre next und back Funktionen implementieren:

class MyViewContollerSuperclass: UIViewController { 

    func next(segue: String) { 
     self.performSegueWithIdentifier(segue, sender: self) 
    } 

    func back() { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Dann würden Sie Controller aktuelle Ansicht erklärt werden, wie:

class MyActualViewController: MyViewContollerSuperclass { 

     @IBACTION func ~~~ { 
      self.back() 
     } 
    } 
+0

Ich habe ziemlich viele Storyboards und habe "Zurück" - und "Nächste" -Schaltflächen in jeder Ansicht. Ich wollte "perfromsegue" und "viewController" nicht immer wieder eingeben, also habe ich "next" und "back" erstellt. – JasonP

Verwandte Themen