Eu tenho um View Controller no qual meu valor é 0 (label) e quando abro esse View Controller de outro ViewController
, configurei viewDidAppear
para definir o valor 20 no label. Funciona bem, mas quando fecho o aplicativo e, novamente, abro o aplicativo, mas o valor não muda porque viewDidLoad
, viewDidAppear
e viewWillAppear
nada é chamado. Como posso ligar quando abro meu aplicativo. Eu tenho que fazer alguma coisaapplicationDidBecomeActive
?
175
Respostas:
Curioso sobre a sequência exata de eventos, instrumentei um aplicativo da seguinte maneira: (@Zohaib, você pode usar o código NSNotificationCenter abaixo para responder sua pergunta).
No lançamento, a saída fica assim:
Digite o plano de fundo e digite novamente o primeiro plano:
fonte
Usando Objective-C
Você deve registrar um
UIApplicationWillEnterForegroundNotification
na suaViewController
'sviewDidLoad
método e sempre aplicativo vem de volta do fundo você pode fazer o que quer fazer no método registrado para notificação.ViewController
O viewWillAppear ou o viewDidAppear não serão chamados quando o aplicativo voltar do segundo plano para o primeiro plano.Não se esqueça de cancelar o registro da notificação para a qual você está registrado.
Nota se você registrar o seu
viewController
paraUIApplicationDidBecomeActiveNotification
, em seguida, o seu método seria chamado cada vez que seu aplicativo se torna ativo, não é recomendado para registrarviewController
para esta notificação.Usando Swift
Para adicionar observador, você pode usar o seguinte código
Para remover o observador, você pode usar a função deinit de swift.
fonte
Versão Swift 3.0 ++
No seu
viewDidLoad
, registre-se na central de notificações para ouvir esta ação aberta em segundo planoEm seguida, adicione esta função e execute a ação necessária
Por fim, adicione esta função para limpar o observador de notificações quando o seu controlador de exibição for destruído.
fonte
Swift 4.2. versão
Registre-se no NotificationCenter
viewDidLoad
para ser notificado quando o aplicativo retornar do segundo planoImplemente o método que deve ser chamado.
Você pode remover o observador depois que ele
ViewController
for destruído. Isso é necessário apenas abaixo do iOS9 e macOS 10.11fonte
Basta fazer com que seu controlador de visualização se registre para a
UIApplicationWillEnterForegroundNotification
notificação e reaja de acordo.fonte
viewDidLoad
receber a notificação como sugerido por @nsgulliver. VocêviewDidAppear
também ligarádoYourStuff
para definir seu rótulo com o valor desejado.Acho que registrar-se no UIApplicationWillEnterForegroundNotification é arriscado, pois você pode acabar com mais de um controlador reagindo a essa notificação. Nada garante que esses controladores ainda estejam visíveis quando a notificação for recebida.
Aqui está o que eu faço: Forço a chamada viewDidAppear no controlador ativo diretamente do método didBecomeActive do delegado do aplicativo:
Adicione o código abaixo a
- (void)applicationDidBecomeActive:(UIApplication *)application
fonte
tente adicionar isso no aplicativo AppDelegate applicationWillEnterForeground.
fonte
De acordo com a documentação da Apple:
Descrição:
informa a um controlador filho que sua aparência está prestes a mudar. Se você estiver implementando um controlador de contêiner personalizado, use este método para informar à criança que suas exibições estão prestes a aparecer ou desaparecer . Não invocar
viewWillAppear:
,viewWillDisappear:
,viewDidAppear:
, ouviewDidDisappear:
diretamente .Descrição:
Diz a um controlador filho que sua aparência mudou. Se você estiver implementando um controlador de contêiner personalizado, use este método para informar ao filho que a transição da exibição está concluída.
Código de amostra:
Pergunta: Como consertei?
Resp : Eu encontrei este pedaço de linhas em aplicação. Essas linhas fizeram com que meu aplicativo não recebesse nenhuma notificação do ViewWillAppear. Quando comentei essas linhas, está funcionando bem .
fonte