2016-06-25 5 views
2

Когда Пытаюсь Тип Return My Func Я получаю эту ошибку в AppDalgate.SwiftИспользование неразрешенного идентификатора 'checkOrientation' Swift

AppDalgate.Swift

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

    } 

этот код для 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

Также неясно, что вы пытаетесь получить путем рекурсивного вызова 'checkOrientation' – Ike10

ответ

3

Ваш делегат приложения не имеет доступа к функциям в вашем контроллере просмотра. Если вы хотите, чтобы достичь этого, один из вариантов было бы добавить переменную в AppDelegate и установите его равным к реализованным ViewController Как так:

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

После этого, вы можете получить доступ к методам в ViewController от в AppDelegate как так:

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

ОДНАКО, имейте в виду, что это не то же экземпляр класса ViewController, что ваше приложение будет использовать, когда приложение закончит запуск. Поэтому, если вы попытаетесь использовать метод, который ссылается на данные, которые добавляются после запуска приложения, это не сработает.

Также имейте в виду, что AppDelegate должен быть как можно более кратким из соображений удобства.

Кроме того, вы, вероятно, следует изменить checkOrientation функцию:

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

Наконец, рассмотреть возможность удаления checkOrientation целиком и поставить свою логику в supportedInterfaceOrientationsForWindow. Пример:

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

Спасибо! Как сделать это доступ к функции в моем представлении – kvra13

+0

@ kvra13 См. Мои правки. – Ike10

+0

OK Я просто получаю эту ошибку при вводе кода редактирования Не могу преобразовать возвращаемое выражение типа 'Int' для возврата типа 'UIInterfaceOrientationMask' @ lke10 – kvra13

Смежные вопросы