2011-08-10 12 views
12

Mam klasy, która jest typu UITableViewController. Ta klasa ma element typu UINavigationBar, którego używam do dodawania przycisku edycji widoku tabeli.pushViewController bez navigationcontroller

Wywołanie tej metody jest nieprawidłowe.

[self.navigationController pushViewController:controller]; 

Jak mogę przesunąć widok szczegółów na widoku po wybraniu wiersza tabeli bez zawijania moje UITableViewController w UINavigationController?

Odpowiedz

5

Nie można przekazać kontrolera widoku do kontrolera nawigacyjnego, jeśli nie ma kontrolera nawigacyjnego. Jeśli chcesz przesyłać kontrolery i wyświetlać najwyższy kontroler i wszystko, po prostu użyj kontrolera UINavigationController i skończ z nim.

Możesz przesłać dowolną liczbę UINavigationItem s do swojego paska UINavigationBar, a pełnomocnik twojego baru otrzyma powiadomienie, gdy użytkownik użyje przycisku Wstecz, abyś mógł podjąć odpowiednie działanie. Aby uzyskać więcej informacji, patrz the documentation.

35

Najbliższą alternatywą, jeśli nie chcesz używać kontrolera nawigacyjnego, są kontrolery widoku modalnego. .

[self presentViewController:controller animated:YES completion:nil]; 

To przesuń dźwignię na ekranie od dołu lub po zmianie sterownika modalTransitionStyle może przewrócić lub zanikać w

Aby zamknąć kontroler zadzwoń:

[self dismissViewControllerAnimated:YES completion:nil]; 
+0

Uratowałeś mi dzień mężczyzna, dzięki –

9

Chciałbym zawinąć UITableView wewnątrz UINavigationController i po prostu ukryć UINavigationBar.

[self.navigationController setNavigationBarHidden:YES animated:NO]; 

Następnie utwórz przycisk Wstecz, który wyskakuje ViewController ze stosu.

9

Co można również zrobić, aby użyć kontrolera nawigacyjnego, jak zwykle, a następnie ukryć go.

Aby ukryć kontroler nawigacyjny za pomocą storyboardów: zaznacz go i usuń zaznaczenie opcji "Pokaż pasek nawigacji" w inspektorze atrybutów. Inni mogą zasugerować, aby ukryć pasek nawigacyjny w każdym kontrolerze, ale problem polega na tym, że będzie wyświetlany przez milisekundę, a następnie zniknie.

Navigation Controller attributes tab

1

To prawda, że ​​bez UINavigationController nie można naciskać widoku kontrolerów. Raczej obecne kontrolery widoku modally poprzez UIViewController.present(_ viewControllerToPresent:, animated:, completion:)

Ale to jest możliwe, aby utworzyć niestandardową segue do wyświetlania kontroler widok, jak gdyby był remis (lub jakakolwiek inna animacja chcesz), chociaż wydaje się, że za pomocą UINavigationController właśnie sprawia, że ​​rzeczy łatwiej.

Oto kilka związanych linki do dokumentacji:

UINavigationController Class Reference

Customizing the Transition Animations

Presenting a Modal View Controller

Powiązane problemy