Используя предпочтительные области в других приложениях

Класс NSPreferencePane не ограничивается для использования только Установками системы. Ваше собственное приложение может использовать его также. Можно снова использовать предпочтительные области, предназначенные для Установок системы точно так же, как Ассистент Установки Mac OS X делает с предпочтительной областью Даты и Времени. Или, можно записать предпочтительные области для использования исключительно собственным приложением.

Встраивание единственной области

Встраивание предпочтительной области в Ваше собственное приложение является в основном вопросом добавления основного представления области предпочтения в окно и отправки надлежащих информационных сообщений к предпочтительному объекту области. Предпочтительный объект области ответственен за доступ и сохранение пользовательских настроек. Процедура следующие.

  1. Инициализируйте предпочтительную область. Если Вы имеете путь к предпочтительному пакету области, загружаете и инициализируете предпочтительный объект области со следующими строками кода.

    NSBundle *prefBundle = [NSBundle bundleWithPath: pathToPrefPaneBundle];
    Class prefPaneClass = [prefBundle principalClass];
    NSPreferencePane *prefPaneObject = [[prefPaneClass alloc]
                initWithBundle:prefBundle];

    Для предпочтительных областей, сохраненных в пакете приложения, используйте один из NSBundle pathForResource методы для получения пути к предпочтительной области. Например, если предпочтительные области сохранены в названном подкаталоге PreferencePanes в приложении Resources каталог, полный путь может быть получен с помощью

    pathToPrefPaneBundle = [[NSBundle mainBundle]
                pathForResource: @”NameOfPane” ofType: @”prefPane”
                inDirectory: @”PreferencePanes”];
  2. Выберите предпочтительную область. Когда Вы будете готовы вывести на экран предпочтительную область, отправьте ей a loadMainView сообщение. Его возвращаемое значение является основным представлением области предпочтения если успешный; при отказе это возвращается nil. Затем, уведомьте предпочтительную область, что она собирается быть выведенной на экран путем отправки ему a willSelect сообщение. Поскольку этот метод может потенциально изменить основное представление области предпочтения, получить основное представление снова с mainView сообщение. Теперь добавьте представление в свое окно. Центрируйте предпочтительное представление области горизонтально, но измените размеры окна вертикально для размещения представления. Наконец, отправьте, предпочтительная область возражают a didSelect сообщение.

    Код для выбора предпочтительной области похож на следующий.

    NSView *prefView;
    if ( [prefPaneObject loadMainView] ) {
        [prefPaneObject willSelect];
        prefView = [prefPaneObject mainView];
        /* Add view to window */
        [prefPaneObject didSelect];
    } else {
        /* loadMainView failed -- handle error */
    }
  3. Отмените выбор предпочтительной области. Приложение требуется, чтобы отменять выбор предпочтительной области, прежде чем произойдет любое из следующих действий:

    • окно переключается на другое представление

    • предпочтительные завершения окна области

    • выходы приложения

    Приложение требуется, чтобы выпускать объект только при выходе из приложения; для других событий предпочтительный объект области может быть повторно выбран в более позднее время.

    Первый шаг должен спросить предпочтительный объект области, готово ли это быть невыбранным путем отправки ему a shouldUnselect сообщение. Если одна из пользовательских настроек имеет недопустимое значение, объект может отказаться быть невыбранным. Метод возвращает одно из значений от Таблицы 1 для указания ее готовности, которая будет невыбранной. Если предпочтительная область возражает возвратам NSUnselectLater, это указывает, что должно получить еще некоторую информацию от пользователя, прежде чем это будет знать что действие взять. Когда предпочтительный объект области готов, он отправляет одно из следующих двух уведомлений, чтобы указать, нормально ли теперь продолжаться, или необходимо прервать отмену выбора.

    NSPreferencePaneDoUnselectNotification

    Сделайте отмену выбора

    NSPreferencePaneCancelUnselectNotification

    Отмените отмену выбора

    Когда NSUnselectLater возвращается, регистр для этих двух уведомлений, прибывающих из предпочтительного объекта области, и временно прервите отмену выбора. Продолжайте как соответствующие после получения одного из этих уведомлений.

    Когда предпочтительный объект области указывает, что может быть невыбранным, отправить ему a willUnselect сообщение. Затем, выполните соответствующие меры, вызывающие отмену выбора: удалите представление, закройте окно или подготовьте выходить. Наконец, отправьте объект a didUnselect сообщение.

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

Управление набором областей

Крупное приложение, вероятно, имеет большое количество предпочтений. Несмотря на то, что можно использовать NSTabView для соединения тесно связанных предпочтений в единственный предпочтительный объект области, Вы, возможно, должны создать многократные предпочтительные области. Ваше приложение должно обеспечить пользовательский интерфейс для выбора областей.

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

Если у Вас есть больше предпочтительных областей, чем может вписаться в ширину Вашего окна, обеспечьте дополнительный значок «Show All» в верхнем левом углу. Значок должен быть значком приложения, к которому предпочтения применяются (не обязательно собственный значок приложения предпочтения). Выбор этого значка представляет двумерную матрицу всех предпочтительных значков области, из которых пользователь может выбрать. Также обеспечьте представление направо от значка «Show All», в который пользователи могут перетащить свои любимые предпочтительные области. Любимые предпочтительные области пользователя должны быть сохранены как часть собственных пользовательских настроек приложения предпочтения. См. приложение Установок системы для примера.