ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

Отображаем настройки программы в меню Settings

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

Перед изучением этой статья рекомендую прочитать NSUserDefaults (хранение данных), т.к. некоторые данные мы будем брать оттуда.

Давайте продолжим работать с проектом, который мы создали в статье NSUserDefaults (хранение данных). Откройте его и добавьте файл настроек (settings bundle). С помощью этого файла настройки нашей программы будут отображаться в меню Settings. Чтобы добавить этот файл выполните следующие действия File -> New -> New File… В появившемся окне слева выберите Resource, затем Settings Bundle и нажмите кнопку Next.

Теперь перед вами окно сохранения файла, ничего не меняя, просто нажмите кнопку Save.

Далее мы будем редактировать файл Root.plist (в этом файле и хранятся настройки), найдите его в только что добавленном Settings.bundle. Выберете этот файл щелчком мышки и разверните список спецификаторов настроек Preference Specifiers. Как видите, некоторые настройки Xcode уже выполнил за нас. Но для чистоты эксперимента давайте их удалим и добавим новые.

Чтобы добавить элемент в меню Preference достаточно создать новое поле (элемент с полем создаются вместе), у каждого элемента всегда есть тип (Type) и название (Title).

Всего доступно 7 типов:

  • PSTitleValueSpecifier
  • PSTextFieldSpecifier
  • PSToggleSwitchSpecifier
  • PSSliderSpecifier
  • PSMultiValueSpecifier
  • PSGroupSpecifier
  • PSChildPaneSpecifier

В зависимости от выбранного типа — указываются необходимые для него ключи. Список типов с ключами я предоставлю позже, а пока что давайте попробуем создать рабочее приложение.

Чтобы мы могли видеть ключи (а не их псевдонимы) следует кликнуть правой кнопкой мышки на любой свободной области окна Root.plist и выбрать в меню Show Raw Keys/Value. Это должно выглядеть как на картинке ниже:

Теперь наведите курсор мышки на PreferenceSpecifiers и щелкните на появившемся значке плюс.

Перед вами появится всплывающее меню, в котором следует выбрать тип нового элемента (в моей версии Xcodeтипа PSChildPaneSpecifier в этом меню нету, его следует выбирать в поле Type уже созданного элемента). Давайте выберем тот же тип, что на картинке ниже.

При выборе типа возможно появление следующего окошка:

Но я в таких случаях просто нажимаю кнопку Continue и продолжаю работать.

Теперь раскроем только что созданный элемент и заполним у него ключи:

  • поле Type оставляем без изменений;
  • в поле Title впишем значение Student name;
  • в полне Identifier впишем name;

Кроме уже созданных — имеются обязательные ключи, без которых элемент не будет отображен в меню настроек. Ключ Default Valueотноситься к обязательному у элемента типа PSTitleValueSpecifier. Для добавления нового ключа подведите курсор мышки к уже имеющемуся ключу и нажмите на значек плюс. При этом Xcode сам добавит новый ключ и предоставит вам список возможных ключей, которые относятся к данному типу элемента. Как и оговаривалось, выберем ключ с именем Default Value, его значение оставим пустым.

В результате, у вас долно все получится вот так:

Перед первым запуском хочу объяснить пару моментов. В статье NSUserDefaults (хранение данных), мы сохраняли имя студентки в UserDefaults под ключом name. И в нашем файле настроек в ключе Identifier мы указали то же самое значение, так вот это и есть наше связующее звено. То значение, которое мы запишем в UserDefaults  под этим ключом (name) будет отображаться в меню Settings. А значение, которое указано в ключе Title — будет отображено как заголовок нашего поля. Таким образом мы можем задавать значения по умолчанию для пунктов меню, а те значения, которые выберет пользователь в пункте меню — попадут к нам в программу и мы можем вывести их в консоль (как мы и делаем) или на экран.

Чтобы увидеть результат нашей работы — запустим приложение, затем нажмем кнопку Home и зайдем в меню Settings. В этом меню мы увидим имя нашего приложение, после щелчка на нем развернется детальная информация:

Теперь, как и обещал, привожу список типов с ключами:

PSTitleValueSpecifier (Поле заголовка)


Ключ: Type (обязательный)
Тип: String
Значение: PSTitleValueSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Key (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: DefaultValue (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Values
Тип: Array
Значение: Пара ключ–значение

Ключ: Titles
Тип: Array
Значение: Пара ключ–значение

Значение ключа Values должно быть таким же как значение ключа Titles.

PSTextFieldSpecifier (Текстовое поле ввода)


Ключ: IsSecure
Тип: Boolean
Значение: YES/NO

Ключ: KeyboardType
Тип: String
Значение: один из наборов символов Alphabet, NumbersAndPunctuation, NumberPad, URL или EmailAddress

Ключ: AutocapitalizationType
Тип: String
Значение: один из наборов символов None, Sentences, Words, AllCharacters. Значение по умолчанию — None.

Ключ: AutoCorrectionType
Тип: String
Значение: один из наборов символов Default (по умолчанию), No, Yes.

PSToggleSwitchSpecifier (Переключатель)


Ключ: Type (обязательный)
Тип: String
Значение: PSToogleSwitchSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Key (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: DefaultValue (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: TrueValue
Тип: Boolean
Значение: YES

Ключ: FalseValue
Тип: Boolean
Значение: NO

PSSliderSpecifier (Бегунок)


Ключ: Type (обязательный)
Тип: String
Значение: PSSliderSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Key (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: DefaultValue (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: MinimumValue (обязательный)
Тип: Number
Значение: Минимальное значение

Ключ: MaximumValue (обязательный)
Тип: Number
Значение: Максимальное значение

Ключ: MinimumValueImage
Тип: String
Значение: Картинка (21х21 пиксель)

Ключ: MaximumValueImage
Тип: String
Значение: Картинка (21х21 пиксель)

PSMultiValueSpecifier (Список значений)


Ключ: Type (обязательный)
Тип: String
Значение: PSMultiValueSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Key (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: DefaultValue (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

Ключ: Values
Тип: Array
Значение: Пара ключ–значение

Ключ: Titles
Тип: Array
Значение: Пара ключ–значение

PSGroupSpecifier (Группа элементов)


Ключ: Type (обязательный)
Тип: String
Значение: PSGroupSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов.

PSChildPaneSpecifier (Ссылка на другую страницу настроек)


Ключ: Type (обязательный)
Тип: String
Значение: PSChildPaneSpecifier

Ключ: Title (обязательный)
Тип: String
Значение: Задаваемый пользователем набор символов

Ключ: File
Тип: String
Значение: Имя plist-файла без расширения

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

Исходный код можно скачать здесь.

Comments are closed.