Pergunta

Alguém pode me dar o código de exemplo que eu posso usar para primeiro apresentar um controlador de visualização modal e depois descartá -lo? É isso que tenho tentado:

    NSLog(@"%@", blue.modalViewController);
    [blue presentModalViewController:red animated:YES];
    NSLog(@"%@", blue.modalViewController);
    [blue dismissModalViewControllerAnimated:YES];
    NSLog(@"%@", blue.modalViewController);
Este código está no ViewDidload ("Blue" e "Red" são subclasses do UIViewController). Espero mostrar a vista vermelha e depois escondê -la imediatamente, com alguma animação. No entanto, esse código de código apresenta apenas a visão modal e não a descarta. Qualquer ideia? O primeiro log mostra "null", enquanto os outros dois logs mostramu003CRedViewController: 0x3d21bf0>
Outro ponto é que, se eu colocar este código no ApplicationDidfinishlaunching: a View Red não aparece, e todos os logs ficam "nulos"

Foi útil?

Solução

Primeiro de tudo, quando você coloca esse código no ApplicationDidFinishLaunching, pode ser o caso de os controladores instanciados do Builder de Interface ainda não estão vinculados ao seu aplicativo (para que "Red" e "Blue" ainda sejam nil).

Mas para responder à sua pergunta inicial, o que você está fazendo de errado é que você está ligando dismissModalViewControllerAnimated: No controlador errado! Deve ser assim:

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

Normalmente, o controlador "vermelho" deve decidir se descartar em algum momento (talvez quando um botão "cancelar" é clicado). Então o controlador "vermelho" poderia chamar o método self:

[self dismissModalViewControllerAnimated:YES];

Se ainda não funcionar, pode ter algo a ver com o fato de que o controlador é apresentado de maneira animada, para que você não tenha permissão para descartar o controlador logo após apresentá -lo.

Outras dicas

A maneira mais fácil de cansar do Xcode 4.52 foi criar uma visualização adicional e conectá -las usando o Modal Segue (Controle arraste o botão da visualização um para a segunda exibição, escolhido modal). Em seguida, arraste um botão para a segunda visualização ou a visualização modal que você criou. Controle e arraste este botão para o arquivo de cabeçalho e use a conexão de ação. Isso criará uma ibação no seu arquivo controlador.m. Encontre o seu tipo de ação do botão no código.

[self dismissViewControllerAnimated:YES completion:nil];

Rápido

Atualizado para Swift 3

enter image description here

Storyboard

Crie dois controladores de exibição com um botão em cada um. Para o segundo controlador de exibição, defina o nome da classe SecondViewController e o storyboard ID para secondVC.

Código

ViewController.swift

import UIKit
class ViewController: UIViewController {

    @IBAction func presentButtonTapped(_ sender: UIButton) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC")
        myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        self.present(myModalViewController, animated: true, completion: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {

    @IBAction func dismissButtonTapped(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
}

Fonte:

PresentModalViewController:

MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];

DispensMmodalViewController:

[self dismissModalViewControllerAnimated:YES];

Rápido

self.dismissViewControllerAnimated(true, completion: nil)

A maneira mais fácil de fazer isso é usar o storyboard e um segue.

Basta criar um segue do FirstViewController (não o controlador de navegação) do seu TabBarController para um LoginViewController com a interface do usuário de login e nomeie -o "ShowLogin".

Crie um método que retorne um BOOL para validar se o usuário conectado e/ou sua sessão for válida ... de preferência no appDelegate. Chame isso de ISSessionValid.

No seu FirstViewController.m Substitua o método ViewDidAppear da seguinte maneira:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if([self isSessionValid]==NO){
        [self performSegueWithIdentifier:@"showLogin" sender:self];
    }
}

Então, se o usuário efetuou login com sucesso, basta descartar ou exibir o LoginViewController para mostrar suas guias.

Funciona 100%!

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top