2016-06-25 5 views
2

Wenn ich versuche Typ My Func Zurück bekomme ich diesen Fehler in AppDalgate.SwiftVerwendung von ungelösten Bezeichner 'checkOrientation' Swift

AppDalgate.Swift

func application (application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
     return checkOrientation(self.window?.rootViewController) 

    } 

Dieser Code für ViewController.Swift

func checkOrientation(viewController:UIViewController?)-> Int{ 

     if(viewController == nil){ 

      return Int(UIInterfaceOrientationMask.All.rawValue)//All means all orientation 

     }else if (viewController is LoginViewController){ 

      return Int(UIInterfaceOrientationMask.Portrait.rawValue)//This is sign in view controller that i only want to set this to portrait mode only 

     }else{ 

      return checkOrientation(viewController!.presentedViewController) 
     } 
    } 
+0

Es ist auch unklar, was Sie von rekursiv Aufruf 'checkOrientation' – Ike10

Antwort

3

Ihr App-Delegierter hat keinen Zugriff auf Funktionen in Ihrem View Controller. Wenn Sie dies erreichen wollen, wäre eine Option sein, eine Variable auf die AppDelegate hinzuzufügen und setzt sie gleich eine instanziiert ViewController Wie so:

//Add this to your AppDelegate Outside of the methods. 
var vc = ViewController() 

Nachdem Sie dies getan, können Sie die Methoden des Viewcontroller Zugriff vom AppDelegate wie so:

//Inside a method of AppDelegate 
//Replace ... with your parameters 
vc.checkOrientation(...) 

JEDOCH bedenken Sie dies nicht die gleiche Instanz der ViewController Klasse, die Ihre Anwendung verwenden, wenn die Anwendung startet beendet. Wenn Sie also versuchen, eine Methode zu verwenden, die auf Daten verweist, die nach dem Start der Anwendung hinzugefügt wurden, funktioniert sie nicht.

Denken Sie auch daran, dass die AppDelegate aus Leistungsgründen so knapp wie möglich gehalten werden sollte.

Darüber hinaus sollten Sie wahrscheinlich Ihre checkOrientation Funktion ändern:

func checkOrientation(viewController:UIViewController?)-> UIInterfaceOrientationMask { 
    if viewController is LoginViewController { 
     return UIInterfaceOrientationMask.Portrait 
    } else { 
     return UIInterfaceOrientationMask.All 
    } 
} 

Schließlich betrachten checkOrientation vollständig entfernen und seine Logik in supportedInterfaceOrientationsForWindow setzen. Beispiel:

func application (application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
    if self.window?.rootViewController is LoginViewController { 
     return UIInterfaceOrientationMask.Portrait 
    } else { 
     return UIInterfaceOrientationMask.All 
    } 
} 
+0

Dank zu gewinnen suchen! Wie es Zugriff auf Funktion in meiner Ansicht ermöglicht – kvra13

+0

@ kvra13 Siehe meine Änderungen. – Ike10

+0

Ok, ich erhalte diesen Fehler, wenn ich den Bearbeitungscode eingib. Rückgabeausdruck des Typs 'Int' kann nicht in 'UIInterfaceOrientationMask' konvertiert werden @ lke10 – kvra13