Porównaj ceny domen i usług IT, sprzedawców z całego świata

(Swift) Odprężyć Sege, gdy kilka kontrolerów widoku prowadzi do tego samego wyglądu?


Próbuję zakodować grę w kata i mam problemy z rozwijaniem segmentów. Mam wiele kontrolerów widoku, które kończą się tym samym widokiem, w którym użytkownik gra rzeczywistego wykonawcę.
Jednak w zależności od prezentowanego kontrolera chcę, aby gra była w różnych „trybach” (np. Multiplayer, single player itp.). Próbuję ponownie dodać przycisk odtwarzania, który rozwija się do poprzedniego kontrolera widoku, ale nie wiem, jak się rozwinąć, gdy istnieje wiele ścieżek, które użytkownik może pokonać, aby dotrzeć do tego widoku.
Innymi słowy, moja aplikacja wygląda tak:
A - & > B - & > C lub
A - & GT; D - & > C, gdzie C może (idealnie) do pracy D lub B.
Zastanawiałem się, jaki jest najlepszy sposób na wdrożenie tego? Czy powinienem po prostu osadzić wszystkie moje kontrolery widoku w kontrolerach nawigacji? A może istnieje sposób na przedstawienie określonego kontrolera widoku na podstawie określonego warunku? Dziękuję za pomoc!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli masz dowolną logikę użytkownika i chcesz zadzwonić do oprogramowania NOTIND Segue dla różnych kontrolerów widoku, jest to jak to zrobić:
  • Dodaj
    relaxFromCViewController
    do obu
    BViewController
    i
    DBViewController
    : BViewController.swift
    class BViewController : UIViewController { @IBAction func unwindFromCViewController(segue:UIStoryboardSegue) { }}
    DViewController.swift
    class DViewController : UIViewController { @IBAction func unwindFromCViewController(segue:UIStoryboardSegue) { }}
  • W swoim storyboardzie utwórz ten fragment i nadaj mu identyfikator, a następnie powiąż go z akcją zdefiniowaną powyżej
    relaxFromCViewController
    :

<ol start="3">
[*]
Zadzwoń do relaksu, korzystając z kodu:
self.performSegueWithIdentifier("unwindFromCViewControllerSugueId", sender: self)

[/*]
[/list]
W ten sposób możesz powrócić do poprzedniego wyglądu bez względu na to, skąd pochodzi.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Proces rozwijania płynności zwykle automatycznie wykrywa poprzednie wystąpienie UIViewController. Dokładny proces jest opisany w tym

Uwaga techniczna
https://developer.apple.com/li ... .html
od Apple, ale w skrócie:

Począwszy od kontrolera widoku, który zainicjował rozwijanie
segue, kolejność wyszukiwania jest następująca:
  • Następny kontroler widoku w łańcuchu oskarżonych jest wysyłany wiadomość
    viewControllerForUnwindSegueAction: fromViewController: withSender:
    . W przypadku kontrolera widoku modalnego będzie to kontroler Gatunki, które spowodowały PresentViewController: Animated: Zakończenie: . Inaczej parentViewController. Domyślna implementacja szuka tablica
    childViewControllers
    odbiornika dla żądanego kontrolera widoku radzić sobie z odprężającą akcją. Jeśli żadne z dzieci kontrolery widoku odbiornika nie chcą obsługiwać operacji odwijania, odbiornik sprawdza czy chce obsłużyć działanie odprężenia i zwraca self, jeśli tak jest Więc. W obu przypadkach
    CanPerformunWindseAction: FromviewController: Fromsender:
    służy do określenia, czy ten kontroler reprezentacji chce przetwarzać działania relaks.
  • Jeśli not-view-controller jest zwracany z
    viewControllerForUnwindSegueAction: fromViewController: withSender:
    do Krok pierwszy: wyszukiwanie powtarza się od następnego kontrolera widoku w łańcuch respondentów.
Dokładny proces będzie więc zależał od tego, jak zaprezentowałeś kontroler widoku C - na przykład za pomocą widoku modalnego płynnego lub wypychania płynnego na
UINavigationController
, ale o ile zarówno B, jak i D implementują rozwijanie działanie, musisz być dobry.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Po prostu wywołałbym kod
popViewController: animated
, aby przejść do kontrolera widoku, jeśli umieściłeś go na stosie nawigacyjnym, lub
dismissViewController: animated
, jeśli był prezentowany modalnie.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się