O que estou tentando fazer é clicar em um botão (que foi criado no código) e chamar um controlador de exibição diferente e executar uma função no novo controlador de exibição.
Eu sei que isso poderia ser feito com relativa facilidade no IB, mas isso não é uma opção.
Um exemplo do que eu quero fazer seria se você tivesse dois controladores de exibição, um com uma tela inicial da casa. O outro controlador de vista deu uma volta pela casa e você pode percorrer todos os cômodos em uma ordem definida. A tela inicial teria botões para cada sala que permitiriam que você pulasse para qualquer ponto da caminhada.
fonte
E se alguém está se perguntando como fazer isso
swift
:fonte
nil
? Não é que um aplicativo SEMPRE tenha um AppDelegate ?!sharedApplication()
deve ser substituído porshared
. ou seja, remova "Application" e os parênteses. Portanto, o código de trabalho completo a partir do Swift 5.2 seria:if let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
Parece que você só precisa de uma
UINavigationController
configuração?Você pode acessar
AppDelegate
qualquer lugar do programa viaNo delegado do aplicativo, você deve ter a configuração do controlador de navegação, via IB ou no código.
No código, supondo que você já tenha criado o seu controlador de exibição 'Visão geral da casa', seria algo parecido com isto em seu
AppDelegate
didFinishLaunchingWithOptions
...Depois disso, você só precisa de um controlador de exibição por 'sala' e invoca o seguinte quando um evento de clique no botão é selecionado ...
Eu não testei o código acima, então perdoe os erros de sintaxe, mas espero que o pseudo-código seja útil ...
fonte
É assim que eu faço.
Não se esqueça de importar.
fonte
Basta seguir estas etapas
1.importe seu delegado de aplicativo em sua classe onde você deseja que o objeto seja delegado.
2. dentro da sua classe, crie uma instância do objeto delegado do seu aplicativo (é basicamente um singleton).
Agora, invoque o método usando o seletor
ou diretamente por
para rápido
vou recomendar o primeiro. Corra e vá.
fonte
Evite ter que incluir seu AppDelegate.h em qualquer lugar. É um elenco simples que percorre um longo caminho, permitindo desenvolver um Controller independente e reutilizá-lo em outro lugar sem se preocupar com o nome da classe e assim por diante ...
Aproveitar
fonte
Muitas boas respostas já foram adicionadas. Embora eu queira adicionar algo que me convenha a maior parte do tempo.
e é isso. Use-o em todo o aplicativo como uma constante.
por exemplo
Não se esqueça de importar yourAppDelegate.h no arquivo .pch ou macros correspondente.
fonte
Se alguém precisar do mesmo no Xamarin (Xamarin.ios / Monotouch), isso funcionou para mim:
(Exigir o uso de UIKit;)
fonte
E caso você precise acessar o delegado da extensão WatchKit em um controlador de exibição no watchOS:
fonte
Atualização para Swift 3.0 e superior
chamando o método acima do seu controlador, seguindo
Resultado:
fonte
Você pode adicionar
#define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate]
noPrefix.pch
arquivo do seu projeto e, em seguida, chamar qualquer método seuAppDelegate
em qualquer umUIViewController
com o código abaixo.fonte
Mesmo se tecnicamente viável, NÃO é uma boa abordagem. Quando você diz: "A tela inicial possui botões para cada sala que permitem saltar para qualquer ponto da caminhada". Então, você deseja passar pelo appdelegate para chamar esses controladores via eventos tohc nos botões?
Essa abordagem não segue as diretrizes da Apple e apresenta muitas desvantagens.
fonte
Em 2020, iOS13, xCode 11.3. O que está funcionando para o Objective-C é:
#import "AppDelegate.h"
Está funcionando para mim, espero o mesmo para você! : D
fonte