Staram się kliknąć przycisk (utworzony w kodzie) i wywołać inny kontroler widoku, a następnie uruchomić funkcję w nowym kontrolerze widoku.
Wiem, że można to zrobić stosunkowo łatwo w IB, ale nie jest to opcja.
Przykładem tego, co chciałbym zrobić, byłoby posiadanie dwóch kontrolerów widoku, jednego z ekranem powitalnym domu. Drugi kontroler widoku miał po domu przejście, przez które można było przejść przez wszystkie pokoje w ustalonej kolejności. Ekran powitalny miałby przyciski dla każdego pokoju, które pozwoliłyby ci przejść do dowolnego punktu na przejściu.
źródło
A jeśli ktoś zastanawia się, jak to zrobić w
swift
:źródło
nil
? Czy to nie aplikacja ZAWSZE ma AppDelegate ?!sharedApplication()
należy go zastąpićshared
. tj. usuń „Aplikacja” i nawiasy. Tak więc pełny działający kod od Swift 5.2 byłby następujący:if let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
Brzmi jak potrzebujesz
UINavigationController
konfiguracji?Możesz uzyskać dostęp do
AppDelegate
dowolnego miejsca w programie za pośrednictwemW aplikacji delegowanej powinieneś mieć skonfigurowany kontroler nawigacyjny za pośrednictwem IB lub kodu.
W kodzie, zakładając, że już utworzyłeś kontroler widoku „Przegląd domu”, byłoby to coś takiego w twoim
AppDelegate
didFinishLaunchingWithOptions
...Po tym potrzebujesz tylko kontrolera widoku na „pokój” i wywołujesz następujące zdarzenia, gdy zostanie odebrane zdarzenie kliknięcia przycisku ...
Nie testowałem powyższego kodu, więc wybacz mi błędy składniowe, ale mam nadzieję, że pseudo kod pomoże ...
źródło
Tak to robię.
Nie zapomnij zaimportować.
źródło
Wystarczy wykonać następujące kroki
1. zaimportuj delegata aplikacji na zajęcia, do których chcesz przekazać obiekt aplikacji.
2. wewnątrz klasy utwórz instancję obiektu delegowania aplikacji (jest to w zasadzie singleton).
3. Teraz wywołaj metodę za pomocą selektora
lub bezpośrednio przez
dla szybkiego
polecę pierwszy. Uruchom i idź.
źródło
Unikaj konieczności dołączania AppDelegate.h wszędzie. To prosta obsada, która przechodzi długą drogę, umożliwiając opracowanie niezależnego kontrolera i ponowne użycie go w innym miejscu bez obawy o nazwę klasy i tak dalej ...
Cieszyć się
źródło
Wiele dobrych odpowiedzi zostało już dodanych. Chociaż chcę dodać coś, co najbardziej mi odpowiada.
i to wszystko. Używaj go w całej aplikacji, tak jak na stałe.
na przykład
Nie zapomnij zaimportować pliku yourAppDelegate.h do odpowiedniego pliku .pch lub makra.
źródło
Jeśli ktoś potrzebuje tego samego w Xamarin (Xamarin.ios / Monotouch), działało to dla mnie:
(Wymagaj użycia UIKit;)
źródło
A jeśli potrzebujesz dostępu do rozszerzenia rozszerzenia WatchKit z kontrolera widoku w systemie watchOS:
źródło
Aktualizacja do wersji Swift 3.0 i nowszej
wywołanie powyższej metody z kontrolera przez następujące czynności
Wynik:
źródło
Możesz dodać plik
#define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate]
swojego projektu,Prefix.pch
a następnie wywołać dowolną metodęAppDelegate
w dowolnymUIViewController
z poniższym kodem.źródło
Nawet jeśli jest to technicznie wykonalne, NIE jest dobrym podejściem. Kiedy mówisz: „Ekran powitalny miałby przyciski dla każdego pokoju, które pozwoliłyby ci przejść do dowolnego punktu na przejściu”. Więc chcesz przejść przez appdelegate, aby wywołać te kontrolery poprzez zdarzenia tohc na przyciskach?
To podejście nie jest zgodne z wytycznymi Apple i ma wiele wad.
źródło
W 2020 roku iOS13, xCode 11.3. W Objective-C działa:
#import "AppDelegate.h"
Działa dla mnie, mam nadzieję, że to samo dla ciebie! :RE
źródło