Добавление настроек приложения в Settings

    Если у вас есть неигровое приложение (в игровых принято размещать настройки в самом приложение, хотя нет правил без исключений) с некоторым количеством настроек, то вместо того, чтобы реализовывать выбор и хранение настроек в самом приложении можно добавить их в приложение «Настройки/Settings» самого телефона, причем делается это очень быстро и легко.

    Image Hosted by ImageShack.us

    Я столкнулся с необходимостью добавить к приложению несколько настроек, просмотрел некоторое количество уроков и статей, но почти везде описания были какие-то обрывочные и слишком запутанные, поэтому сейчас я попытаюсь вкратце и доступно изложить основные принципы создания окошка настроек своего приложения в Settings.

    Если описать весь процесс в двух словах, то надо сделать следующее:
    • Добавить в проект набор файлов Settings.bundle
    • Описать в файле Root.plist все необходимые элементы интерфейса окна настроек
    • Добавить в проект объект типа NSUserDefaults и получить из него все настройки

    Теперь все по порядку и более подробно. Для добавления всех необходимых файлов в ваш проект необходимо зайти в меню File -> New -> New file и там выбрать Resource -> Settings Bundle:

    Image Hosted by ImageShack.us

    После этого в списке файлов вашего проекта появится новая папка Settings.bundle, состоящая из файла Root.plist и папки en.lproj. Именно этот файли и содержит всю информацию, на основании которой будет оформлен раздел настроек вашего приложения в Settings, а папка нужна для реализации локализации приложения под разные языки.
    Файл Root.plist представляет из себя просто список элементов интерфейса с их свойствами, из которых будет состоять ваше окно настроек. По умолчанию он выглядит так:

    Image Hosted by ImageShack.us

    Если сейчас откомпилировать приложение, то в Settings появится строчка с именем приложения, после выбора которой появится окно, состоящее из заголовка, текстового поля, переключателя и слайдера (ползунка). Расположены они в таком же порядке в каком идут в файле. Добавляя, удаляя и меняя местами строчки в файле можно настроить внешний вид окна настроек в Settings.

    Теперь подробнее про основные элементы интерфейса и их свойства.

    У всех элементов есть свойство Type — определяет тип элемента, у всех элементов кроме Slider есть свойство Title — заголовок элемента интерфейса, у всех элементов, кроме Group есть свойство Identifier — определяет идентификатор элемента по которому к нему в последствии можно будет обращаться.
    Список уникальных для каждого элемента свойств:

    Group — имеет только два свойства Title и Type и нужен лишь для создания надписей и визуального разделения настроек на группы.

    Text Field
    • Autocapitalization Style — автокапитализация текста (отключена, начало предложений, каждое слово, все буквы заглавные)
    • Autocorrection Style — коррекция ошибок в тексте
    • Default Value — значение текстового поля по умолчанию
    • Text Field Is Secure — поле для ввода пароля
    • Keyboard Type — тип клавиатуры для этого поля (алфавит, цифры и знаки, цифры, URL, eMail)

    Toggle switch (переключатель)
    • Default Value — значение по умолчанию (yes/no)
    • Value for OFF — значение, которое будет возвращать элемент в случае ВЫКЛ (в случае если нужно получать значение отличное от NO, например 234)
    • Value for ON — значение, которое будет возвращать элемент в случае ВКЛ (в случае если нужно получать значение отличное от YES, например 143)

    Slider
    • Default Value — значение по умолчанию
    • Maximum Value- максимальное допустимое значение
    • Minimum Value — минимальное допустимое значение
    • Max Value Image Filename — изображение возле максимума
    • Min Value Image Filename — изображение возле минимума

    Multi value
    • Titles — массив надписей в таблице выбора
    • Values- значение возвращаемое при выборе каждого из вариантов
    • Default Value- значение по умолчанию

    Отдельно хочется описать процесс добавления изображений к элементу Slider. Простое перетаскивание файлов изображений в ваше приложение тут не сработает, так как после компиляции файлы приложения будут в одной «песочнице», а файлы приложения Settings в другой. Для того, чтобы добавить файлы в «песочницу» приложения Settings необходимо зайди в Finder, найти папку с вашим приложением, там будет элемент Settings.bundle, нажать на нем правой кнопкой и выбрать Show Package Contents

    Image Hosted by ImageShack.us

    Откроется папка с уже знакомыми нам файлами, именно в нее и нужно скопировать файлы изображений.

    Теперь. когда внешний вид окна настроек создан осталось только получить эти настройки из приложения. Для этого необходимо создать объект типа NSUserDefaults, присвоить ему данные настроек приложения и получать значения эти настроек по ключам, которые были указаны в свойстве Identifier каждой из настроек.

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        text = [defaults objectForKey:@"textField"];
    

    Работает так же и обратный процесс, то есть можно из приложения изменить настройки и сохранить их:

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
       [defaults setValue:text forKey:@"textField"]; 
    

    По ссылке можно скачать пример приложения, которое имеет все основные элементы окна настроек, так же есть возможность, меняя положение слайдера и переключателя, менять настройки.

    Image Hosted by ImageShack.us
    Image Hosted by ImageShack.us

    Скачать исходник приложения

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 20

    • UFO just landed and posted this here
        +3
        Да, там registerDefaults добавить и будет всё ок
        • UFO just landed and posted this here
            0
            Согласен, виноват, упустил этот момент. Сейчас отдален от компьютера, как только доберусь исправлюсь.
        +3
        Блин, зачем выносить настройки приложения в общие настройки? По моему добавить кнопку или иконку в самой програме и настраивать все там, удобнее и быстрее.
          +6
          Есть такой тип приложений, для которых настраивать что либо надо очень редко. В этом случае кнопка или иконка для настроек будет чаще всего мешать или просто занимать ценное место на маленьком экране.
            0
            Интересная версия )

            На самом деле причины две

            1. Авторам влом делать интерфейс настроек в программе.

            2. Смена настроек требует ре-инициализации движка, что тоже делать влом, а рестарт приложения на иОС сделать невозможно — поэтому проще послать пользователя искать настройки черт знает где.

            Жизнь проще и глупее )

              +2
              Это не версия, а гайдлайны от Apple.

              Она рекомендует нечасто используемые настройки выносить отдельно, а для игр и приложений где могут какие-то опции меняться довольно часто, делать встроенными. Все есть в документации.
                0
                Охотно верю что там именно это и написано. Эппл большие мастера превратить косяк в фичу.

                Ксати о гайдлайнах. До недавнего времени в Mac App Store не было поддержки In-App purchases.
                НИГДЕ в гайдлайнах не было ни слова о запрете вставлять в программу продажу своего DLC
                Между тем реджектили всех по статъе 7.2 хотя DLC сюда не относится ни разу.

                7.2 Apps that create a store inside themselves for selling or distributing other software (i.e., an audio plug-in store in an audio app) will be rejected.

                Просто вспомнилось.
              0
              Есть и гибридное решение — InAppSettingsKit
                0
                Вот это хорошая штука. Спасибо за наводку.
              +1
              Для некоторых программ это было бы удобно. Можете посмотреть, как это реализовано в WP7 для приложений, которые идут из коробки — почта, картинки, плеер и т.д.
              0
              Что это, пересказ документации?
                0
                Подскажите, а каким образом UISwitch меняется с ON/OFF на I/O?
                Запустил проект в симуляторе — там ON/OFF, у автора на картинках — I/O. Возможно ониспользовал другой код? Спс.
                  +1
                  Скорее всего это зависит от региональных настроек. Поставьте в эмуляторе в settings регион Россия.
                    0
                    Спс. Помогло!
                      +1
                      Да, это зависит от региональных настроек, в Английском языке ON/OFF в остальных I/O, при чем I и O это картинки, а не текст, и для того, что бы сделать свитч Да/Нет, пришлось писать свой велосипед.

                      Потом уже нашел вот это: www.catamount.com/blog/1063/uicustomswitch-customizing-uiswitch-color-it-change-labels/
                    0
                    С точки зрения UX — выносить настройки отдельно далеко не самая лучшая идея.
                    Выходить из приложения и искать что-то в том длинном списке, который на одном из скриншотов — скучно, долго и не эффективно. Кстати зря минусуете GunDisasm, он дело говорит.
                      0
                      Согласен, не раз обнаружил «неожиданные» настройки программы спустя долгое время после установки.
                      Еще некоторые авторы делают такой пункт, куда помещают about без всяких настроек. Еще на старых айфонах подгрузка дополнительных таких пунктов добавляет тормозов.
                      0
                      спасибо за статью, для iOS пишу давненько, но как-то не было случаев выноса настроек из приложения.
                      обязательно читну, если не что-то не пойму в документации apple :)

                      Only users with full accounts can post comments. Log in, please.