xcode / storyboard: nie można przeciągnąć przycisku paska na pasek narzędzi u góry

99

Mam kontroler widoku, który jest szczegółowym widokiem tabeli. Kliknięcie wiersza tabeli powoduje przejście do widoku szczegółów. Widok szczegółowy jest osadzony w kontrolerze nawigacyjnym w taki sposób, że w lewym górnym rogu paska nawigacji znajduje się przycisk, który odsyła z powrotem do tabeli. Na razie w porządku.

Chcę teraz dodać przycisk edycji po prawej stronie paska nawigacji, aby można było edytować widok szczegółów. Mój plan jest taki, że modalnie doda kolejny kontroler widoku, który pozwoli ci edytować szczegóły elementu. Standardowe rzeczy.

Jednak gdy próbuję przeciągnąć element przycisku paska z listy obiektów na pasek nawigacji, to nie zajmie. Zamiast tego, gdy puszczę przycisk myszy, pozostawia przycisk paska na kontrolerze paska kart na dole. (Mój schemat nawigacji zawiera różne zakładki i dla każdej zakładki tabelę, widok szczegółowy itp.)

Każdy, kto zetknął się z tym wcześniej i może zasugerować, co robię źle, lub jakieś obejście, aby dodać element przycisku paska po prawej stronie ekranu nawigacji. Czy muszę to dodać w kodzie?

Dzięki za wszelkie sugestie.

user1904273
źródło
Zapoznaj się z poniższym samouczkiem brianflove.com/2012/10/01/…
casillas
Udało mi się dodać przycisk za pomocą self.navigationItem.rightBarButtonItem = self.editButtonItem; i utworzyłem nową edycjęvc w scenorysie, jednak nie jestem pewien, jak utworzyć płynność. Nie można tego zrobić w scenorysie, ponieważ przycisk edycji nie jest widoczny, więc myślę, że musi być w kodzie. spróbuję się przygotować
user1904273
Jeśli jedna z odpowiedzi Ci pomogła, zaakceptuj ją :)

Odpowiedzi:

157

Mam ten sam problem z Xcode6 i zauważyłem, że UINavigationItem jest dodawany automatycznie do pierwszego ViewController, który osadzasz w NavigationController, ale dla kolejnych ViewControllers będziesz musiał dodać go ręcznie w następujący sposób:

  1. W bibliotece obiektów znajdź element nawigacji, a następnie przeciągnij go do drugiego kontrolera widoku w scenorysie.
  2. W bibliotece obiektów znajdź Element przycisku paska, a następnie przeciągnij go do elementu nawigacji utworzonego w poprzednim kroku.

Teraz będziesz mieć przyciski paska przyklejone do górnej części sceny.

Aktualizacja Rozwiązanie nadal działa z XCode 7, ale chciałem dodać bardziej opisowe zdjęcie. Na wypadek, gdyby ktoś nie był zaznajomiony z wyżej wymienionymi nazwami standardowymi lub technicznymi. Zwróć uwagę na czerwone strzałki po prawej stronie, odnoszą się one do kroku 1, kroku 2 wspomnianego powyżej. Zwróć także uwagę na hierarchię widoków w lewym czerwonym prostokącie. wprowadź opis obrazu tutaj

Wael Showair
źródło
2
Tak, to zrobiło to dla mnie. Myślę, że to jest poprawna odpowiedź, XCode nie wydaje się dodawać elementu nawigacji do kolejnych kontrolerów ViewControllers.
Jeremy Chone,
to jest poprawne, ale czerwona strzałka na obrazku powinna przejść od elementu przycisku paska w bibliotece obiektów do lewego czerwonego pola.
malhal
Możesz upuścić go na kanwie, jak również wskazano czerwoną strzałką lub możesz upuścić go w konspekcie dokumentu, zgodnie z sugestią. To nie robi różnicy
Wael Showair
Cieszę się, że znalazłem tę odpowiedź, ponieważ działa świetnie - jestem po prostu zaskoczony, dlaczego UINavigationItem nie ma już na Storyboard? Jest tam oczywiście w czasie wykonywania, ponieważ kod self.navigationItem.rightBarButtonItem = ...będzie działał. Zgaduję, że kontroler UINavigationController na pierwszym VC tworzy jego instancję dla wszystkich kolejnych VC umieszczonych na stosie. Jednak ręcznie przeciągając jeden na to miejsce, dlaczego nie skończysz z dwoma elementami UINavigationItem jeden na drugim? Ten, który przeciągnąłeś ręcznie, a ten już tam jest z UINavigationController?
James Toomey
70

Paskudna sztuczka:

  1. Zmień swój bieg, aby pchać.
  2. Ustaw potrzebną zawartość
  3. Ustaw z powrotem, aby pokazać

Następnie zawartość będzie można edytować i będziesz mieć styl płynny, który nie został wycofany.

Baxter Lopez
źródło
Człowieku, taki brzydki. Ale to działa UIBarButtonItemna kontrolerze widoku w Xcode 7.3 .
mikeho
OMG, nadal działa w XCode 8.2.1. Kiedy to zostanie naprawione? Prawdopodobnie nigdy
Dima Rostopira
To jedyny sposób, jaki znalazłem bez dodawania kodu.
Joshua
O Boże ... Dziękuję (y)
Nasir Khan
Nie mogę uwierzyć, że ten błąd nadal występuje po ponad 2 latach
Carioni
33

W kontrolerze widoku Twojego scenariusza prawdopodobnie brakuje pliku Navigation Item. Możesz przeciągnąć go z biblioteki obiektów i upuścić na kontrolerze widoku.

Będziesz wtedy mógł przeciągać i upuszczać elementy przycisków paska na lewą lub prawą stronę paska nawigacji.


źródło
1
to zadziałało, ale wydaje mi się, że było to wykonywane automatycznie, o ile miałeś
sekcję
To powinna być prawidłowa odpowiedź. Reszta wydaje mi się
hackem
23

Rozwiązałem to. przeciągnij „Element nawigacji” do widoku szczegółów. niż możesz przeciągnąć w pozycji przycisku paska.

Jamal N. Ahmad
źródło
8

Sposób, w jaki rozwiązałem ten problem, polegał na tym, że zamiast przeciągać UINavigationController do Storyboard i próbować dodać do tego UIBarButtonItems, przeciągnąłem do UITableViewController, a następnie przeszedłem do

Editor-> Embed In-> Navigation Controller

Co dało ten sam wynik co poprzednio, z wyjątkiem tego, że mogłem dodać UIBarButtonItems po obu stronach paska nawigacyjnego bez żadnych problemów.

tallen11
źródło
Powinieneś iść do góry !!
Vin,
5

Właściwie to problem z Xcode. Jedna sztuczka, która zadziałała, to dodanie przycisku paska w STRUKTURZE PLIKU PO LEWEJ STRUKTURY. Zainstalowałem bezpośrednie dodawanie widoku. Mam nadzieję, że ci to pomoże. :)

Chetan Kumar
źródło
To działa! Myślę, że jest to rozwiązanie, o ile Apple naprawi błąd w Xcode 8.2
Arjun Kalidas,
5

Myślę, że to błąd. Miałem ten sam problem, który naprawiłem, wyłączając klasy rozmiarów, a następnie włączając go.

Klasy rozmiaru można wyłączać i włączać w dokumencie Interface Builder.

wprowadź opis obrazu tutaj

Hongyang
źródło
4

Miałem też ten problem, zamknąć i ponownie otworzyć projekt działał dla mnie.

Hsm
źródło
3

Uważam, że to dziwactwo XCode. Miałem ten sam problem. Musiałem zresetować Xcode i przesunąć rozmieszczenie rzeczy w scenorysie, aby w końcu zacząć działać. Już działa.

rotarycuff
źródło
3

Myślę, że to błąd Xcode. W Xcode 8 zmień seguew scenorysie przed kontrolerem widoku paska kart na wszystkie jego opcje ( show detail, present...). Następnie wróć do show. Spróbuj przeciągnąć elementy przycisków paska i zmodyfikować kafelek. Mi to pasuje!

user2174595
źródło
1

Czy próbowałeś „wyczyścić” swój projekt? Wiem, że czasami mi to pomaga (przejdź do „Produkt”> „Wyczyść”). Możesz też usunąć pasek nawigacji i spróbować ponownie.

Jeśli uważasz, że to błąd programistyczny, przekaż dalej swój kod. Chętnie pomogę w każdy możliwy sposób. :)

JJ Yu
źródło
1

Musisz zresetować xCode IDE. Zamknij xCode i napisz poniższe kody na terminalu ... To zadziała.

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode
Yusuf Kıldan
źródło
1

Ten sam problem. Miałem kontroler widoku tabeli wewnątrz kontrolera nawigacyjnego i wiele kontrolerów widoku podążających dalej w dół łańcucha. „Element nawigacji” był tworzony automatycznie dla PIERWSZEGO głównego kontrolera widoku i mogłem dodać do niego „Element przycisku paska” bez problemu. Poprzez scenorys, przeciągnij i upuść. Ale to wszystko. Na następującym kontrolerze widoku tabeli i dalszych kontrolerach widoku, mimo że znajdowały się w początkowym kontrolerze nawigacji (pojawił się automatycznie wygenerowany przycisk powrotu), scenorys nigdy nie pozwolił mi dodać elementu przycisku paska.

Rozwiązanie Waela Showaira nie zadziałało dla mnie. Elementy przycisków paska nie były wyświetlane.

W końcu rozwiązałem to programowo (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

Nie jest potrzebny żaden dodatkowy element nawigacyjny ani przycisk paska.

Elliott Davies
źródło
1

Ja też stanąłem przed tym samym problemem, mogłem rozwiązać ten problem, wybierając opcję kontrolera widoku głównego, a następnie w symulowanej macierzy zmieniłem opcję górnego paska na nieprzezroczysty pasek nawigacji i mogłem dodać element na górze paska nawigacji. ta odpowiedź komuś pomoże.

reetu
źródło
1

Miałem ten sam problem w xcode 8. Musiałem po prostu zamknąć xcode i ponownie otworzyć projekt, a następnie mogłem dodać przycisk paska do kontrolera głównego bez żadnych problemów.

SGM
źródło
1

Dla XCode 8

Tutaj jest wiele odpowiedzi. Wypróbowałem kilka z nich, ale nie mogłem. Więc znalazłem swoje rozwiązanie, po prostu wybierz swoją ViewController, przejdź do sekcji Attributes Inspector i zmień górny pasek na nieprzezroczysty pasek nawigacji i wysięgnik. Zobaczysz pasek nawigacyjny w swojej serii ujęć. Możesz zmienić tytuł lub dodać element. Jeśli nie chcesz zachować nieprzezroczystego , możesz zmienić styl na wywnioskowany .

wprowadź opis obrazu tutaj

emresancaktar
źródło
1

W Xcode 10 właśnie zmieniłem typ płynności przechodzącej do tego nowego kontrolera widoku na `` Push (przestarzały) '', dodałem element nawigacyjny, który był dozwolony po dokonaniu tego przełączenia. Jeśli przełączysz się z powrotem do pierwotnie pożądanego typu segue, element nawigacji pozostanie.

Mark Lyons
źródło
0

Zamiast przeciągać „Element przycisku paska” do „Kontrolera nawigacji”, przeciągnij go do „Kontrolera widoku szczegółowego”. Po osadzeniu widoku szczegółowego w „Widoku nawigacji” „Element nawigacji” zostanie dodany do „Kontrolera widoku szczegółowego”. Jeśli przeciągniesz „Element przycisku paska” na prawą stronę elementu nawigacji, element zostanie uwzględniony w „Elementach przycisku paska prawego”

Nancy
źródło
0

jak powiedział Mark Lyons, zastosowałem to samo rozwiązanie.

  • najpierw używany push segue
  • dodał element paska
  • wróć z powrotem, aby pokazać płynność
  • Gotowe
A_Mo
źródło
0

W Xcode 11 możesz przeciągnąć przycisk na pasek nawigacyjny, aby utworzyć przycisk paska.

Sala
źródło