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.


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


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.


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.


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.


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.


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. :)


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


4

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


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.


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!


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. :)


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

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.


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.


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.


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


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.


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”


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

0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.