2014-12-27 9 views
21

Sto usando Parse & ParseUI. Voglio che la sottoclasse PFLoginViewController abbia uno sfondo trasparente. In futuro, voglio porre una vista sfocata sullo sfondo.Sfondo trasparente per viewcontroller presentato in modo modesto

Ma .... Una volta completata l'animazione di PFLoginViewController, lo sfondo diventa nero ... Mentre durante l'animazione lo sfondo era trasparente.

func presentLogin() { 
    var loginViewController = LoginViewController() 
    var signupViewController = SignUpViewController() 

    loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | PFLogInFields.DismissButton 
    signupViewController.fields = .UsernameAndPassword | .Email | .DismissButton | .SignUpButton 
    loginViewController.delegate = self 
    loginViewController.logInView.backgroundColor = UIColor.clearColor() 
    loginViewController.logInView.opaque = false 
    signupViewController.delegate = self 

    loginViewController.signUpController = signupViewController 

    self.presentViewController(loginViewController, animated: true) {() -> Void in 
     // 
    } 
} 

sottoclasse utilizzato di mio logincontroller:

class LoginViewController: PFLogInViewController { 

    @IBOutlet weak var _nmcLogoLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     let userName = SettingsManager.userName 
     let password = SettingsManager.password 

     self.logInView.usernameField.text = userName 
     self.logInView.passwordField.text = password 

     NSBundle.mainBundle().loadNibNamed("LoginViewBranding", owner: self, options: nil)[0] as? UIView 

     self.logInView.logo = _nmcLogoLabel 

    } 

} 

Come posso renderla trasparente?

P.S. L'applicazione di clearColor sullo sfondoColor nella sottoclasse non fa alcuna differenza

risposta

60

Risolto.

Il problema era che presentViewController non mantiene la vista che stavo coprendo.

loginViewController.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext ha fatto il trucco.

+0

si può anche commentare il codice per "pushViewController". – Alok

7

stessa della risposta selezionata ma visivamente attraverso IB:

enter image description here

8

Parte della soluzione è nascosto nella domanda. Hai bisogno di tre linee per rendere lo sfondo trasparente, vale a dire. isOpaque = falsebackgroundColor = .clear & impostare modalPresentationStyle

Ecco la soluzione completa. Nel View Controller chiamare, chiamare questa funzione:

func presentModal() { 
    let modalController = ModalViewController() 
    modalViewController.modalPresentationStyle = .OverCurrentContext 
    presentViewController(modalViewController, animated: true, completion: nil) 
} 

E in ModalViewController s' viewDidLoad():

override func viewDidLoad() { 
    super.viewDidLoad() 

    view.isOpaque = false 
    view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc. 
} 
+1

ha funzionato per me quando ho impostato il codice in 'Init', non nel metodo' viewDidLoad' –

+0

Grazie per averlo indicato. Ho aggiornato il codice. –

+0

@NitinNain, ho impostato view.alpha = 0,35 ma il controllo di tutti i controller di visualizzazione è stato impostato anche con alpha e aspetto sfocato –