present modally modal custom swift parse.com parse-platform ios8.1

swift - modally - Fondo transparente para el controlador de vista presentado modalmente



swift present modal view controller programmatically (4)

Estoy usando Parse y ParseUI. Quiero que mi subclase PFLoginViewController tenga un fondo transparente. En el futuro, quiero establecer una vista borrosa sobre el fondo.

Pero ... Una vez que se realiza la animación del PFLoginViewController, el fondo se vuelve negro ... Mientras que durante la animación, el fondo era transparente.

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 // } }

La subclase utilizada de mi 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 } }

¿Cómo puedo hacerlo transparente?

Ps La aplicación de clearColor al backgroundColor en la subclase no hace ninguna diferencia


Arreglado.

El problema era que presentViewController no mantiene la vista que estaba cubriendo.

viewController.modalPresentationStyle = .overCurrentContext

Hizo el truco.


En caso de que alguien todavía esté luchando con un fondo transparente, encontré esta solución hace algún tiempo: no recuerdo dónde, pero aún funciona bien con el último Xcode & Swift.

ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.modalPresentationStyle = .custom self.transitioningDelegate = self }


Parte de la solución está oculta en la pregunta. Necesita tres líneas para hacer que el fondo sea transparente, a saber. isOpaque = false backgroundColor = .clear & set the modalPresentationStyle

Aquí está la solución completa. En el controlador de vista de llamada, llame a esta función:

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

Y en ModalViewController viewDidLoad() :

override func viewDidLoad() { super.viewDidLoad() view.isOpaque = false view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc. }


igual que la respuesta seleccionada pero visualmente a través de IB: