Z definicji segue nie może tak naprawdę istnieć niezależnie od scenorysu. To nawet nie w imię klasy: UIStoryboardSegue
. Nie tworzysz sekwensów programowo - tworzy je środowisko wykonawcze scenariuszy. Zwykle możesz wywołać performSegueWithIdentifier:
kod kontrolera widoku, ale zależy to od tego, że w scenorysie jest już skonfigurowany segue.
Myślę jednak, że pytasz, w jaki sposób możesz utworzyć metodę we wspólnym kontrolerze widoku (klasie bazowej), która przejdzie do nowego kontrolera widoku i zostanie odziedziczona przez wszystkie klasy pochodne. Możesz to zrobić, tworząc taką metodę w kontrolerze widoku klasy podstawowej:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
a następnie w klasie pochodnej wywołaj tę metodę po kliknięciu odpowiedniego przycisku lub wybraniu wiersza tabeli lub cokolwiek innego.
UIViewController
metody nazwanejperformSegueWithIdentifier:sender:
do tego.UIView
„spresentModalViewController:animated:
jest przestarzała. Z dokumentów - (Przestarzałe w iOS 6.0. Użyj presentViewController: animated: complete: zamiast.)Myślałem, że dodam inną możliwość. Jedną z rzeczy, które możesz zrobić, jest połączenie dwóch scen w serii ujęć za pomocą segue, który nie jest dołączony do akcji, a następnie programowe wyzwolenie tego segmentu w kontrolerze widoku. Sposób, w jaki to robisz, polega na tym, że musisz przeciągnąć ikonę właściciela pliku na dole sceny scenorysu, która jest sceną segregowania, i przeciągnąć w prawo do sceny docelowej. Wrzucę obraz, aby pomóc wyjaśnić.
Pojawi się wyskakujące okienko dla „Manual Segue”. Jako typ wybrałem Push. Naciśnij mały kwadrat i upewnij się, że jesteś w inspektorze atrybutów. Podaj identyfikator, którego będziesz używać, aby się do niego odwoływać w kodzie.
Ok, następnie zamierzam segregować za pomocą przycisku programowanego paska narzędzi. W viewDidLoad lub gdzieś indziej utworzę element przycisku na pasku nawigacyjnym z tym kodem:
Ok, zauważ, że selektor jest przyciskany Przyciskiem Przycisku :. Napisz więc metodę void dla tego przycisku, a w tej metodzie wywołasz segue w następujący sposób:
Parametr nadawca jest wymagany do zidentyfikowania przycisku, gdy wywoływane jest przygotowanieForSegue. preparForSegue to metoda ramowa, w której utworzysz instancję swojej sceny i przekażesz jej wartości potrzebne do jej wykonania. Oto jak wygląda moja metoda:
Ok, właśnie go przetestowałem i działa. Mam nadzieję, że to ci pomoże.
źródło
Używam tego kodu do tworzenia instancji mojej niestandardowej podklasy segue i uruchamiania jej programowo. Wydaje się, że działa. Coś z tym nie tak? Jestem zdziwiony, czytając wszystkie pozostałe odpowiedzi, mówiąc, że nie można tego zrobić.
źródło
UIStoryboardSegue
.performSegueWithIdentifier:
jest naprawdę zdefiniowany w scenariuszu. Unikam wszystkich problemów, jeśli sam tworzę segue.Przypuszczam, że odpowiedź na to pytanie została zaakceptowana, ale chciałbym tylko dodać kilka dodatkowych szczegółów.
To, co zrobiłem, aby rozwiązać problem, w którym przedstawiałem widok logowania jako pierwszy ekran, a następnie chciałem przejść do aplikacji, jeśli logowanie jest prawidłowe. Utworzyłem segue z kontrolera widoku logowania do kontrolera widoku głównego i nadałem mu identyfikator taki jak „mój identyfikator”.
Następnie po sprawdzeniu całego kodu logowania, czy login był prawidłowy, zadzwonię
Moje największe nieporozumienie polegało na tym, że próbowałem włożyć segue do guzika i przerwać segregację, gdy tylko zostanie znaleziona.
źródło
Musisz połączyć swój kod z
UIStoryboard
tym, którego używasz. Upewnij się, że idziesz do YourViewController w swoimUIStoryboard
, kliknij ramkę wokół niego, a następnie ustaw jegoidentifier
pole naNSString
wywołanie w kodzie.źródło
Dla kontrolerów znajdujących się w serii ujęć.
jhilgert00 czy tego właśnie szukałeś?
LUB...
źródło
cóż, możesz utworzyć, a także podklasę UIStoryBoardSegue. podklasowanie jest najczęściej używane do tworzenia niestandardowych animacji przejścia.
możesz zobaczyć wideo z wwdc 2011 przedstawiające StoryBoard. jest również dostępny w youtube.
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue
źródło
Chciałbym dodać wyjaśnienie ...
Powszechnym nieporozumieniem, które faktycznie miałem przez pewien czas, jest to, że
prepareForSegue:sender:
metoda wywołuje segment scenorysowy . Nie jest. Segment scenorysu zostanie wykonany, niezależnie od tego, czy zaimplementowanoprepareForSegue:sender:
metodę dla tego (odchodzącego od) kontrolera widoku.Nauczyłem się tego z doskonałych wykładów Paula Hegarty'ego na iTunesU . Przepraszam, ale niestety nie pamiętam, który wykład.
Jeśli połączysz segue między dwoma kontrolerami widoku w serii ujęć, ale nie
prepareForSegue:sender:
wdrożysz metody, segue nadal będzie segregować do docelowego kontrolera widoku. Zostanie jednak segregowany do tego kontrolera widoku nieprzygotowanego.Mam nadzieję że to pomoże.
źródło
Segmentów scenorysów nie należy tworzyć poza scenorysem. Będziesz musiał to załatwić, pomimo wad.
UIStoryboardSegue Reference wyraźnie stwierdza:
Nadal możesz programowo polecić scenorysowi przedstawienie kontrolera widoku za pomocą segue przy użyciu
presentModalViewController:
lubpushViewController:animated:
wywołań, ale potrzebujesz instancji scenorysu.Możesz wywołać
UIStoryboard
metodę klasy s, aby uzyskać nazwaną scenorys z pakietem zero dla pakietu głównego.storyboardWithName:bundle:
źródło
Po pierwsze, załóżmy, że masz dwa różne widoki w serii ujęć i chcesz nawigować z jednego ekranu na drugi, więc wykonaj następujące kroki:
1). Zdefiniuj wszystkie swoje widoki za pomocą pliku klasy, a także identyfikatora scenorysu w inspektorze tożsamości.
2). Pamiętaj, aby dodać kontroler nawigacji do pierwszego widoku. Wybierz go w Storyboard, a następnie Editor> Embed In> Navigation Controller
3). W pierwszej klasie zaimportuj plik „secondClass.h”
4). Dodaj to polecenie w sekcji IBAction, która musi wykonać segue
5).
@"second"
to klasa kontrolera drugiego widoku, identyfikator scenorysu.źródło
self.storyboard
powinno być:UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
storyboardWithName:@"Main"
[self showDetailViewController:next sender:self];
lub[self showViewController:next sender:self];
Przeprojektowałem i wdrożyłem (ponownie) implementację argumentów UIStoryboard: https://github.com/acoomans/Segway
Za pomocą tej biblioteki można programowo definiować sekwencje (bez scenorysu).
Mam nadzieję, że to może pomóc.
źródło
Kilka problemów, właściwie:
Po pierwsze, w przesłanym do nas projekcie segue nie ma identyfikatora „segue1”:
bez identyfikatora
Podaj ten identyfikator, jeśli jeszcze tego nie zrobiłeś.
Po drugie, gdy przesuwasz się z widoku tabeli do widoku tabeli, wywołujesz initWithNibName, aby utworzyć kontroler widoku. Naprawdę chcesz użyć instantiateViewControllerWithIdentifier.
źródło
Oto przykładowy kod dla
Creating a segue programmatically
:źródło
self.prepare(for: self.commonSegue, sender: self)
ze swojej metody akcji. Wtedy jaki jest sens porównywaniaif self.commonSegue == segue {...}
wprepare(for:sender)
metodzie?prepare(for:sender:)
można skonfigurować docelowy kontroler widoku przed jego wyświetleniem. Oczywiście możesz to również zrobić wactionFunction
.