2017-01-27 65 views
6

Zajmuję się tworzeniem uniwersalnej aplikacji na iOS, która ma pewne ustawienia, które nie mają sensu dla niektórych urządzeń. W szczególności chciałabym ukryć pewne ustawienia od użytkownika na urządzeniach, na których szerokość portretu jest poniżej progu. (Na przykład niektóre ustawienia nie powinny być dostępne na iPhone'ie 7, ale powinny być dostępne na iPhone'ie 7 Plus.)Różne ustawienia dla różnych urządzeń?

Mam świadomość, że możliwe jest ustawienie różnych ustawień dla urządzeń iPhone i iPad (zgodnie z opisem w this thread), ale nie o to mi chodzi. Jestem również zaznajomiony z size-class-specific layouts, ale to nie wydaje się mieć zastosowania do ustawień.

Czy można ukryć (lub przynajmniej wyłączyć) określone ustawienia na podstawie wymiarów urządzenia, na którym działa aplikacja?

Czy w tych samych liniach wartości domyślne ustawień mogą się różnić w zależności od wymiarów wyświetlacza?

+0

A co z ustawieniami w niestandardowym modelu, przechowywanymi w tablicy i po prostu zainicjować tablicę z odpowiednimi ustawieniami dla urządzenia? Czego dokładnie szukasz ? – Lefteris

+0

@Lefteris - To nie działa w systemie iOS. Opcje ustawień są zdefiniowane w pliku 'Settings.bundle', który jest odczytywany przez aplikację Ustawienia urządzenia. Ustawienia mogą być wyświetlane, zanim aplikacja uruchomi się jednokrotnie. Nawet jeśli aplikacja została uruchomiona jako pierwsza, nie znalazłem interfejsu API, który pozwala aplikacji na programowe wpływanie na ustawienia wyświetlane użytkownikowi. –

+0

Nie rozumiałem, że masz na myśli ustawienia systemowe. AFAIK, nie możesz robić tego, co chcesz. [Proponuję zajrzeć tutaj] (http://stackoverflow.com/a/1211627/312312) dla alternatywy – Lefteris

Odpowiedz

2

Przepraszam, ale to niemożliwe. Masz rację, że wszystko, co możesz, to mieć różne ustawienia.bundle dla iPadów i iPhone'ów. Ponieważ puzle ustawień iOS 4 mogą być zależne od urządzenia: Root ~ ipad.plist zostanie użyty na iPadzie i Root ~ iphone.plist na iPhonie. Jeśli nie istnieje, zostanie użyta lista Root.plist.

Tak więc z mojego punktu widzenia możesz osiągnąć część swojego celu za pomocą tego 2 pola ustawień. W przypadku bardziej konkretnych przypadków możesz ustawić pewne wartości domyślne po uruchomieniu aplikacji. Ustawienia.bundle nie można modyfikować bezpośrednio z kodu, więc nie można usunąć ani wyłączyć określonego ustawienia, ale można zmienić jego wartość na pewną domyślną wartość na określonym urządzeniu. Każda pozycja w pliku Settings.bundle jest powiązana z kluczem w NSUserDefaults, więc możesz ustawić wartości w NSUserDefaults, a aplikacja ustawień automatycznie to odzwierciedli. Zostanie jednak zapisane w innym miejscu. Możesz go po prostu odczytać w taki sam sposób, jak w przypadku pakietu ustawień, także poprzez NSUserDefaults.

można znaleźć przykład kodu w tej odpowiedzi https://stackoverflow.com/a/32648047/5285151

Jednym z bardziej interesującą opcją jest użycie https://github.com/futuretap/InAppSettingsKit które same z interfejsem dodać rodzime ustawień w aplikacji. Te wewnętrzne ustawienia są synchronizowane z ustawieniami urządzenia, ale masz nad nim większą kontrolę.

+0

InAppSettingsKit wydaje się bardzo obiecujący, więc daje +1. Sugestia ustawienia wartości domyślnych w kodzie nie robi jednak tego, czego szukam: że podczas działania na małych urządzeniach użytkownik nie widzi nawet ustawień, które mają sens jedynie w przypadku większych urządzeń. (W mojej konkretnej aplikacji wymóg ten dzieli populację iPhone'a na dwie części, zamiast dzielić iPhone'y od iPadów.) Ponadto, ponieważ użytkownik może uruchomić aplikację Ustawienia systemu, zanim moja aplikacja kiedykolwiek działa, ta sztuczka jest daleka od niezawodności. To wszystko bardzo frustrujące; Android radzi sobie z fragmentacją urządzeń znacznie lepiej. –