Главная » iPhone » Панели инструментов (toolbars) iPhone

0

Панели инструментов (toolbars), называемые также панелями кнопок, явл» ются одним из решений Apple для универсальных устройств, не имеющих настоящих кнопок. Многие из функционально богатых приложений iPlioiu имеют четыре или пять важных функций, доступ к которым пользователь необходимо получать быстро. Расположенные внизу экрана, панели инструментов предоставляют то, что традиционно рассматривается как ярлык» Возвращаясь к метафоре Apple с книгой, панели инструментов являются закладками к различным главам книги.

Многие из поставляемых приложений iPhone, включая приложения Mobile Phone. YouTube и iTunes WiFi Music Store, используют панели инструментов Они служат для разделения соответствующих страниц с данными (например Featured Music, Purchased Songs и пр.) и для предоставления ярлыков к различным функциям в пределах единого приложения (например. Contacts (Контакты). Recent Calls (Вызовы), Voicemail (Голосовая почта) и пр.)

Создание панели инструментов

Панели инструментов в UIKit представлены классом uiToolbar, хотя и была добавлена обратная совместимость, поэтому вы также можете использовать uiButtonBar, который является тем, что в предыдущих версиях iPhone называлось встроенным программным обеспечением. Как и панели навигации, панели инструментов в своем представлении являются относительно автономными. Внутри они обрабатывают выборы всех этих кнопок — и все это работает:

UiToolbar *toolBar = [ [ UiToolbar alloc ] initlnView: self

withFrame: CGRectMake(0.0, 411.0, 320.0, 49.0) withltemList: [ self toolBarltemList ] ];

[ toolBar setDelegate: self ]; [ toolBar setBarStyle: 1 ]; [ toolBar setButtonBarTrackingMode: 2 ];

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

- (NSArray *)toolBarltemList {

return [ NSArray arrayWithObjects:

[ NSDictionary dictionaryWithObjectsAndKeys: @"tcolBarClicked:kUIButtonBarButtonAction, @"History.png", kUIButtonBarButtonlnfo, @"HistorySelected.png", kUIButtonBarButtonSelectedlnfo, [ NSNumber numberWithlnt: 1], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Page 1", kUIButtonBarButtonTitle, @"0", kUIBu11onBarBu11onType, nil

],

nil ];

)

Данный метод создает массив словарных классов, чтобы содержать свойства для каждой кнопки. Этот массив ограничивается nil— пустым элементом. Каждый словарный объект содержит приведенную далее информацию о кнопке. Ваш файл заголовков должен объявлять переменные как extern, поскольку они скрыты в окружении и не объявлены ни в одном из прототипов.

?   kUIButtonBarButtonAction — метод, который вызывается при нажагии на данную кнопку. Все кнопки могут вызывать одну и ту же процедуру toolBarClicked, поскольку кнопки могут иметь уникальные индентифи- каторы. Это будет продемонстрировано в приводимом далее примере.

?   kUIButtonBarButtonlnfo— имя файла изображения, который ассоциирован с кнопкой в ее обычном (ненажатом) состоянии. Это изображение должно быть скопировано в программную папку приложения, как обсуждалось в главе 2. Данный пример задает файл History.png — изображение, часто используемое в поставляемых Apple приложениях.

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

?   kuiButtonBarButtonTag — тег (tag), специальный объект, который может передаваться для идентификации кнопки. В данном примере тег рассматривается как номер кнопки и имеет тип целого числа. Когда обрабатывается нажатие кнопки, этот тег может использоваться для определения того, какая именно кнопка была нажата.

?   kuiButtonBarButtonTarget — объект, который должен получить уведомление (задается kuiButtonBarButtonAction). В данном примере для разрешения вызывающему виду получать уведомление о нажатиях кнопок используется self.

?   kuiButtonBarButtonTitle— текст заголовка, отображаемый под изображением кнопки.

?   kuiButtonBarButtonType — тип создаваемой кнопки. Единственным корректным значением для кнопок панели инструментов является о.

Для каждой кнопки должен создаваться объект NSDictionary, заканчивающийся ограничивающим nil. Каждая определяемая кнопка должна быть включена в группу кнопок и получить какую-либо конфигурацию. Данный пример отображает пять кнопок. Экран iPhone имеет ширину в 320 пикселов, поэтому каждая кнопка должна быть шириной в 64 пиксела (5×64=320). Для определения конфигурации группы кнопок можно использовать цикл: int buttons [5] = { 1, 2, 3, 4, 5 }; int tag;

[ toolBar registerButtonGrouprO withButtons:buttons withCount:5 ]; [ toolBar showButtonGroup: 0 withDuration:- 0.0 ]; for(tag = 1; tag < 5; tag++) { [ [ toolBar viewWithTag: tag ] setFrame: CGRectMake(((tag – 1) * 64.0), 1.0, 64.0, 48.0)

] ;

)

И последнее, задайте кнопку по умолчанию, чтобы отразить отображаемый текущий вид:

[ toolBar showSelectionForButton: 1 ];

Отображение панели инструментов

После того как вы создали панель инструментов, можете добавить ее к какому-либо виду. Этот вид может также при нажатии кнопки обрабатывать переходы к страницам новых видов. Как правило, используется основной вид, но если программа слишком сложна, то различные ее части могут использовать разные панели инструментов: [ self addSubview: toolBar ];

Бэйджи панели инструментов

В некоторых случаях ваше приложение может захотеть информировать пользователя о новых элементах на какой-либо странице панели инструментов. Чтобы привлечь внимание пользователя, можно добавить к кнопке на панели инструментов бэйдж (badge), содержащий число или какой-либо другой текст. Приведенный далее пример отображает бэйдж с числом 3 на второй кнопке: [ toolBar setBadgeValue:@"3" forButton: 2 ];

Перехват нажатий кнопок

Когда создается панель инструментов, каждая кнопка описывается словарным объектом. Свойство kuiButtonBarButtonAction задает метод, который необходимо вызвать при нажатии кнопки. Этот метод может быть написан для обслуживания всех кнопок, или же для каждой из них можно определить по отдельному методу. Данный метод написан в целевом объекте панели инструментов. как описано в kUIButtonBarButtonTarget: – (void)toolBarClicked:(id) sender { int button = [ sender tag ];

/* Здесь делайте что-нибудь */

}

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии