2017-01-27 70 views
6

Belirli cihazlar için anlamlı olmayan bazı ayarlara sahip evrensel bir iOS uygulaması geliştiriyorum. Özellikle, dikey genişliğin eşiğin altında olduğu cihazlardaki kullanıcılardan bazı ayarları gizlemek istiyorum. (Örneğin, bazı ayarlar bir iPhone 7'de bulunmamalı, ancak bir iPhone 7 Plus'ta bulunmalıdır.)Farklı cihazlar için farklı ayarlar?

iPhone ve iPad aygıtları için farklı ayarların olabileceğini (açıklandığı gibi) biliyorum. this thread numaralı telefondan), ama peşindeyim bu değil. Ayrıca size-class-specific layouts'u da biliyorum, ancak bu ayarlar için geçerli görünmüyor.

Uygulamanın üzerinde çalıştığı aygıtın boyutlarına göre belirli ayarları gizlemek (veya en azından devre dışı bırakmak mümkün mü?)?

Aynı hatlarda, ayarların varsayılan değerlerinin ekran boyutlarına göre değişmesi mümkün mü?

+0

Peki, ayarların özel bir modelde olması, bir dizide saklanması ve dizinin aygıt için uygun ayarlarla başlatılması nasıldır? Tam olarak ne arıyorsun? – Lefteris

+0

@Lefteris - Bu ayar iOS'ta nasıl çalışır? Ayarlar seçenekleri, cihazın Ayarlar uygulaması tarafından okunan bir 'Settings.bundle' dosyasında tanımlanır. Ayarlar, uygulama bir kez bile çalıştırmadan önce görüntülenebilir. Uygulamanın ilk olarak çalıştırılmasının garantisi olsa bile, uygulamanın hangi ayarların kullanıcıya görüntüleneceğini programsal olarak etkilemesine izin veren bir API bulamadım. –

+0

Sistem ayarlarını kastettiğini anlamadım. AFAIK istediğini yapamazsın. [Buraya bakmanızı öneririm] (http://stackoverflow.com/a/1211627/312312) alternatif bir – Lefteris

cevap

2

Üzgünüm ama imkansız. Yapabileceğin her şeyin iPad'ler ve iPhone'lar için farklı settings.bundle olması doğru. IOS 4 Ayarları plist'leri cihaza bağlı olabileceğinden: Root ~ ipad.plist, iPhone'da iPad ve Root ~ iphone.plist üzerinde kullanılacaktır. Eğer mevcut değilse, Root.plist kullanılacaktır.

Bu nedenle bakış açımdan, bu 2 ayarın kullanılmasıyla hedefinizin bir kısmına ulaşabilirsiniz. Daha spesifik durumlar için, uygulama başlatıldığında bazı varsayılan değerler ayarlayabilirsiniz. Settings.bundle doğrudan koddan değiştirilemez, bu nedenle belirli ayarları kaldıramaz veya devre dışı bırakamazsınız, ancak bu değeri belirli bir cihazdaki bazı varsayılan değerlere değiştirebilirsiniz. Settings.bundle öğesindeki her öğe NSUserDefaults anahtarıyla eşleştirilmiştir, böylece NSUserDefaults'da değerler ayarlayabilirsiniz ve ayarlar uygulaması bunu otomatik olarak yansıtacaktır. Yine de, başka bir yerde kurtarılacak. NSUserDefaults aracılığıyla da ayar paketi ile yaptığınız gibi aynı şekilde okuyabilirsiniz.

Sen https://stackoverflow.com/a/32648047/5285151

Bir daha ilginç bir seçenek uygulamasında yerel ayarlar arayüzü ile aynı eklemek https://github.com/futuretap/InAppSettingsKit kullanmaktır bu yanıtında kod örneği bulabilirsiniz. Bu dahili ayarlar cihaz ayarlarıyla senkronize edildi, ancak üzerinde daha fazla kontrole sahipsiniz.

+0

InAppSettingsKit çok umut verici görünüyor, bu yüzden bunun için +1. Ancak, koddaki varsayılan değerleri ayarlama önerisi, aradığım şeyi yapmaz: küçük cihazlarda çalışırken, kullanıcının yalnızca daha büyük cihazlar için anlamlı olan ayarları görmediğini görürsünüz. (Benim özel uygulamasında, bu gereksinim iPhone'ları iPad'lerden ikiye ayırmak yerine ikiye ayırıyor.) Ayrıca, kullanıcı benim uygulamadan önce sistemin Ayarlar uygulamasını çalıştırabildiğinden, bu hile çok güvenilir değil. Hepsi çok sinir bozucu; Android cihaz parçalanması ile uğraşmaktan çok daha iyi bir iş çıkarıyor. –