Ostrzeżenie „Zwykły styl nie jest obsługiwany w elemencie nawigacyjnym” z moim dostosowanym przyciskiem paska

88

Przeciągam okrągły przycisk prostopadły do ​​pozycji prawego przycisku paska i ustawiam obraz na okrągły przycisk prostokątny. Wszystko działa dobrze, z wyjątkiem ostrzeżenia „Zwykły styl nie jest obsługiwany w elemencie nawigacji”. Nawet jeśli wybiorę styl elementu przycisku paska na „Obramowany”, ostrzeżenie nadal będzie widoczne. O co chodzi z Xcode 4.2? Z góry dziękuję!

Ps. Dostosowałem wiele elementów przycisku paska za pomocą przycisku okrągłego prostego, czasami Xcode 4.2 wyświetla tylko jedno ostrzeżenie na elemencie przycisku paska, czasami pokazuje ostrzeżenia na wszystkich elementach przycisku paska.

lu yuan
źródło
1
Napisałem wpis na blogu na ten temat: blog.mosheberman.com/…
Moshe
Nie dodawaj przycisków, dodawaj elementy przycisków paska. To był mój błąd.
Daniel Springer

Odpowiedzi:

135

Udało mi się usunąć te błędy, ręcznie edytując pliki scenorysu i znalazłem obraźliwy wpis style = "zwykły" na elementach przycisku paska w <navigationItem>elemencie.

Zmieniony z:

<barButtonItem key="rightBarButtonItem" style="plain" id="juB-DL-F9i">

Do:

<barButtonItem key="rightBarButtonItem" id="juB-DL-F9i">

To usunęło ostrzeżenia ... dobrze lub źle.

Może to być zdumiewający hack, a większym problemem jest to, że nie spowodowałem jego rootowania ani nie usunąłem niewidocznych elementów przycisków paska z całego dokumentu. Stało się tak po przejściu przez wszystkie elementy jeden po drugim i odkryciu, że niektóre paski nawigacji były puste (bez dzieci) i prawdopodobnie wystąpiło z dużą ilością dziedziczenia kopiuj i wklej (cmd + c | v) i nie używając duplikatu (cmd + d) do zbudowania interfejsu. Chociaż przyczyną źródłową nie była przyczyna pierwotna, objawem było to, że elementy paska nie były wyświetlane w „widoku konspektu” dokumentu do naprawienia. Zachowanie Interface Builder wydaje mi się czasem niuansowe, a pusty pojemnik, w którym powinno znajdować się coś w widoku konspektu, to zapach. Cóż, teraz jest dla mnie. Czasami usunięcie nieprawidłowego węzła i odbudowanie rozwiązuje najdziwniejsze problemy.

OSTRZEŻENIE: wykonaj kopię zapasową swoich scenorysów, zanim spróbujesz tego ... kontrola wersji jest twoim przyjacielem ... Nie ponoszę żadnej odpowiedzialności, gdy twoja storyboard jest całkowicie połączona i nie będzie się kompilować. Wszystko, co otrzymasz, to „Tak ci powiedziałem!” Kilka razy nauczyłem się na własnej skórze, ale skrupulatna kontrola źródła zaoszczędziła mi bólu głowy.

EDYCJA: umieść nawiasy w blokach kodu

Hunter-Orionnoir
źródło
24
wybierz element barbuttonitem w konstruktorze interfejsu, otwórz panel atrybutów po prawej stronie i zmieniając styl elementu przycisku paska na „Bordered”, zastosuj tę samą różnicę do pliku storyboardu. więc to powinno być bezpieczne.
zacieru
Dzięki za tę radę @mash, sposób, w jaki to zrobiłem, był okropnie związany z potencjalnym bólem i cierpieniem.
Hunter-Orionnoir
@ SpaceDog2 Dzięki za ostrzeżenia. Nie dokonałem jeszcze aktualizacji, więc nie mogę dodać do tego żadnego potwierdzenia. I tak byłbym bardzo ostrożny z tą metodą. Wiem, że jak dotąd pomogło to wielu ludziom. Z czasem zobaczymy, czy przestanie pomagać.
Hunter-Orionnoir
5
To rozwiązanie działało idealnie dla mnie w Xcode 7.1. Ponadto, zamiast bezpośrednio edytować kod źródłowy, możesz zmienić to w samej scenorysie (przełączając styl z Zwykłego na Bordered), co daje dokładnie taki sam wynik, jak ręczne usuwanie style="plain"z kodu źródłowego scenorysu. Tak więc wydaje mi się, że ta sugestia Huntera jest uzasadniona.
Erik van der Neut
Sprawdź też odpowiedź dstudeba, nawet nie wiedziałem, co opisał jest możliwe. może zaoszczędzić każdemu bólu i cierpienia związanego z ręczną edycją pliku. Kontrola źródła to twoi przyjaciele, bądźcie bezpieczni. ;)
Hunter-Orionnoir
31

Jeśli klikniesz ostrzeżenie i nie przejdziesz do niewłaściwego elementu nawigacji, wykonaj następujące czynności. (wizualne przedstawienie odpowiedzi Huntera z bezpieczniejszą metodą na podstawie dodanych komentarzy)

W przeglądarce plików kliknij prawym przyciskiem myszy scenorys i wybierz Open As Source Code

wprowadź opis obrazu tutaj

Na stronie kodu źródłowego wyszukaj „zwykły” i znajdź ten dołączony do elementu nawigacji.

wprowadź opis obrazu tutaj

Aby uzyskać nazwę widoku, umieścić „sceny” w pasku wyszukiwania i kliknij strzałkę wyszukiwania z powrotem, aby szukać przede wszystkim na tym tagiem powyżejnavigationItem

wprowadź opis obrazu tutaj

Oto nazwa Twojej Sceny, możesz teraz zmienić widok Storyboard z powrotem na Interface Builder - Storyboardza pomocą metody prawego kliknięcia opisanej powyżej, a następnie przejdź do wyboru Sceny w menu sceny i elementu paska w nim.

wprowadź opis obrazu tutaj

Przejdź do Inspektora atrybutów i zmień styl z PlainnaBordered

wprowadź opis obrazu tutaj

dstudeba
źródło
1
Fajne. Na pewno spróbuję tego następnym razem.
Hunter-Orionnoir
13

Przestałem ostrzegać przed zwykłym stylem, zaglądając do konspektu dokumentu. To pokazywał mój element nawigacyjny, a w ramach tych dwóch elementów przycisków paska, a w każdym z nich przycisk. Obrażające ustawienie znajdowało się na przycisku paska. W Inspektorze atrybutów zmieniłem Styl z Zwykłego na Gotowe i ostrzeżenie zniknęło. Uwaga: używam XCode 5.

MarkAurelius
źródło
8

Jeśli korzystasz ze scenorysu, kliknij ostrzeżenie i powinno przenieść Cię do niewłaściwego elementu nawigacji (miałem dwa za problem, jeden zabrał mnie tam, a drugi nie) - zmień styl i wyczyść projekt.

Styl przycisku paska ustawiony na zwykły

Stal z recyklingu
źródło
W powyższym problemie nigdzie mnie to nie zaprowadziło. Myślę, że jest to punkt krytyczny w tym konkretnym problemie, w ogóle brakowało elementu w nawigatorze, ale odpowiedź dstudeba ma ciekawe podejście, bądź ciekawy, czy otwarcie storyboardu w inny sposób pomaga ludziom.
Hunter-Orionnoir
To jest najwłaściwsza odpowiedź. Zmieniłem styl na Bordered.
Andrej
6

backBarButtonItem leftBarButtonItemi rightBarButtonItemUINavigationItemobiektami. Nie ma żadnej stylewłasności, UINavigationItemwięc to jest powód ostrzeżenia. Należy programowo ustawić barButtons:

iOS 4:  

UIButton *bt=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 [bt setFrame:YourFrame];
 //[bt setImage:[UIImage imageNamed:@"backBT"] forState:UIControlStateNormal];
 [bt addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *leftButton=[[UIBarButtonItem alloc] initWithCustomView:bt];
 self.navigationItem.leftBarButtonItem=leftButton;

IOS 5+:

Przeczytaj sekcję „Dostosowywanie wyglądu” w dokumentacji UIBarButtonItem .

Mata
źródło
3
Mam odziedziczony projekt z wieloma kontrolerami widoku i przyciskami. Nie mogę nakłonić XCode, aby powiedział mi, który przycisk powoduje ostrzeżenie. Jakieś wskazówki? Dzięki!
Olie
Może przejrzyj kontrolery widoku i „znajdź” UIBarButtonItenStyle. Zwykle wtedy właściwość jest nieprawidłowo ustawiona
TimWhiting
1

Na pasku nawigacji spróbuj użyć UIBarButtonItem zamiast okrągłego prostego przycisku i ustaw dla niego Image.

iOSDev
źródło
ale styl UIBarButtonItem nie jest tym, czego potrzebuję.
lu yuan
1

W moim przypadku był to obraz strzałki wstecz, która została ustawiona na „Zwykły”.

Pojawia się komunikat o błędzie dotyczący wszystkich elementów na pasku nawigacyjnym.

user462990
źródło
0

Po upewnieniu się, że wszystkie przyciski paska w scenorysie są ustawione na coś innego niż zwykły, upewnij się, że wykonałeś zatwierdzenie git i usunięto dane pochodne. Spędziłem wieczność próbując dowiedzieć się, dlaczego problem się nie naprawił, a usunięcie folderu danych pochodnych naprawiło go za mnie.

Sethmr
źródło