2017-01-31 1 views
2

mon application est portrait ce que je veux faire est de permettre à 1 contrôleur de vue d'être portrait ou paysage j'ai essayé d'utiliser ce code dans AppDelegate mais je reçois une erreurAutoriser seulement 1 contrôleur de vue d'être en mode paysage ou portrait

func application(_ application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int { 

     let currentViewController: UIViewController? = self.topView 


    // Get topmost/visible view controller 
    var currentViewController: UIViewController? = self.topViewController 
    // Check whether it implements a dummy methods called canRotate 
    if currentViewController?.responds(to: #selector(self.canRotate)) { 
    // Unlock landscape view orientations for this view controller 
    return .allButUpsideDown 
    } 
    // Only allow portrait (standard behaviour) 
    return .portrait 
    } 
} 

Est-ce que quelqu'un sait comment faire ça dans swift?

Répondre

3

J'ai pris l'approche suivante dans mon application.

Créez un UINavigationController personnalisé avec le code suivant & assurez-vous que votre contrôleur de navigation racine est mis à jour pour l'utiliser comme classe.

import UIKit 

class NavigationController: UINavigationController { 
    override var supportedInterfaceOrientations : UIInterfaceOrientationMask { 
     if let _ = presentedViewController as? MyPortraitViewController { 
      return .portrait 
     } 

     return .allButUpsideDown 
    } 
} 

Vous pouvez remplacer MyPortraitViewController avec le nom de la classe du contrôleur de vue que vous souhaitez dévier du paramètre global.

Bien que j'utilise .portrait dans cet exemple, vous pouvez utiliser d'autres options. Un exemple de mise en œuvre serait de remplacer la classe de votre contrôleur de navigation de base dans votre storyboard qui est illustré ci-dessous.

enter image description here

+0

J'ai essayé votre code, mais sa ne va jamais dans cette ligne si let _ = presentedViewController comme? MyPortraitViewController. Je viens de pousser un contrôleur de vue. – Chandan

+0

@Chandan Pouvez-vous placer un point d'arrêt à si let ... et ensuite lancer un po presentViewController pour voir ce que vous obtenez? – CodeBender

+0

Merci @CodeBender. J'ai eu le problème. Je poussais un ViewController sur NavigationController au lieu de presentViewController :). – Chandan