2013-04-06 3 views
6

Jestem stosunkowo nowy w rozwoju iOS. Najpierw opracowałem aplikację na Androida, a teraz przenoszę ją na iOS. Jedną z rzeczy, których nie mogę zrozumieć, jest "odejść". Jestem przyzwyczajony do metody finish() w systemie Android. Dzięki tej metodzie bieżące działanie kończy się samo, a użytkownikowi zostaje przedstawiony poprzedni ekran, który był otwarty przed otwarciem bieżącego ekranu.Odpowiednik iOS dla systemu Android()

Próbuję osiągnąć to, że ekran "tworzenia" zniknie po zapisaniu rekordu. W świecie Androida po prostu zadzwoniłbym do metody finish(), która byłaby załatwiona. Co to jest odpowiednik systemu iOS?

Próbowałem tego kodu w mojej aplikacji na iOS, mając nadzieję, że widok zostanie animowany.

[self.navigationController popToRootViewControllerAnimated:YES]; 

Edytuj: Widok został przedstawiony poniżej.

SettingsViewController *vc = [[SettingsViewController alloc] initWithNibName:@"SettingsView"]; 
controllers = [NSArray arrayWithObject:vc]; 
self.sideMenu.navigationController.viewControllers = controllers; 
[self.sideMenu setMenuState:MFSideMenuStateClosed]; 

gdzie controllers jest zdefiniowany jako takie:

NSArray *controllers = nil; 
+0

W jaki sposób kontroler widoku jest wyświetlany na ekranie? Jedynym sposobem na jej usunięcie jest cofnięcie sposobu wyświetlania. – MishieMoo

+0

Czy próbujesz wyłączyć program SettingsViewController? Gdzie chcesz się udać? Jest to jedyny kontroler widoku w stosie z kodu, który pokazałeś. –

+0

Rozwijam swoją aplikację z menu bocznym. Po załadowaniu aplikacji wyświetlany jest jeden ekran. Użytkownik ma możliwość otwarcia bocznego menu i wybrania z niego elementu menu. Kod w mojej edycji powyżej jest wykonywany, gdy użytkownik wybierze element z bocznego menu. – acedanger

Odpowiedz

14

Jak przedstawić ten kontroler View?

Czy używasz presentViewController:animated:completion:? Jeśli tak, chcesz coś takiego:

[self dismissViewControllerAnimated: YES]; 

Jeśli używasz pushViewController:animated:, nie mówimy o perspektywie modalnej. Mówisz o normalnym ViewControllerze, który wepchnąłeś na stos. Do „cofnąć” to trzeba pop kontrolera wyświetlania:

[self.navigationController popViewControllerAnimated: YES]; 
+0

Dodałem kod, którego użyłem do przedstawienia bieżącego kontrolera widoku na moje pytanie. – acedanger

1

Choć finish() i [self dismissViewControllerAnimated:YES] są podobne pod względem funkcjonalności, ale nie są one dokładnie takie same, gdy wzywamy finish() metodę w Androidzie, jesteśmy programowo mówi systemowi Android, aby całkowicie zniszczył całą aktywność z pamięci, gdy nadpisujemy wywołanie cyklu życia aktywności o wartości onDestroy() i dodajemy dziennik, a następnie logi są wyświetlane po wywołaniu finish(). onDestroy() jest również wywoływana, gdy system potrzebuje zasobów i zwalnia pamięć, kończąc działanie. Ale

[self dismissViewControllerAnimated: YES]; 

nie usuwa instancję UIViewController z pamięci, odpowiednik metody wywołania zwrotnego dla onDestroy() w iOS jest viewDidUnload(), która nie jest wywoływana na wiadomości dismissViewController. Myślę, że system IOS może zwolnić pamięć dla instancji UIViewController, gdy system potrzebuje zasobów, ale nie możemy tego zrobić programowo.