Добавить пользовательские кнопки в контроллер навигации - PullRequest
0 голосов
/ 25 июля 2010

Я пытаюсь либо добавить 3 пользовательские кнопки на панель инструментов моего контроллера навигации в верхней части окна просмотра, либо добавить сегментированный элемент управления с 3 вариантами. У меня есть следующий код в моем делегате приложения, когда я создаю свой контроллер представления (fwc), но кнопки не появляются.

/ * Настройте навигационный контроллер для вкладки подачи * /

// instantiate the feedingViewController and set the title to Feedings
feedingViewController *fwc = 
[[feedingViewController alloc] initWithNibName:@"feedingViewController" 
                                           bundle:[NSBundle mainBundle]];
//fwc.title = @"Feedings";

// set the tab bar item up and add it as feedingViewController's tab bar item
UITabBarItem *feedingTabBarItem = 
[[UITabBarItem alloc] initWithTitle:@"Feedings" image:nil tag:0];
fwc.tabBarItem = feedingTabBarItem;
[feedingTabBarItem release];

// create a new nav controller for feedings and add root view
feedingNavController = [[UINavigationController alloc] init];

//Create the add button, need to change the selector to something though *****
UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                                                                     target:self 
                                                                     action:@selector(newFeeding)]; 
//self.navigationItem.rightBarButtonItem = add;


UIBarButtonItem *flexibleSpaceButtonItem = [[UIBarButtonItem alloc]
                                            initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                            target:nil action:nil];

// Create and configure the segmented control
UISegmentedControl *sortToggle = [[UISegmentedControl alloc]
                                  initWithItems:[NSArray arrayWithObjects:@"Ascending",@"Descending", nil]];

sortToggle.segmentedControlStyle = UISegmentedControlStyleBar;

sortToggle.selectedSegmentIndex = 0;

[sortToggle addTarget:self action:@selector(toggleSorting:)forControlEvents:UIControlEventValueChanged];

// Create the bar button item for the segmented control
UIBarButtonItem *sortToggleButtonItem = [[UIBarButtonItem alloc]initWithCustomView:sortToggle];

[sortToggle release];


// Set our toolbar items
feedingNavController.toolbarItems = [NSArray arrayWithObjects:
                     flexibleSpaceButtonItem,
                     sortToggleButtonItem,
                     flexibleSpaceButtonItem,
                     add,                    
                     nil];
feedingNavController.navigationController.navigationBarHidden=NO;

[sortToggleButtonItem release];
[add release];

// Push the feedingViewController on the nav stack and release it.
[feedingNavController pushViewController:fwc animated:NO];
[fwc release];

1 Ответ

1 голос
/ 25 июля 2010

Чтобы использовать UITabBar, вам понадобится UITabBarController, который отличается от UINavigationController. UITabBar имеет принципиально иное применение, чем UISegmentedControl. Похоже, что функциональность, которую вы пытаетесь реализовать, не подходит для UITabBar. В описании вашего вопроса вы упоминаете, что пытались добавить эти кнопки в «панель инструментов контроллера навигации вверху». UINavigationController имеет UINavigationBar, который является полосой, которая проходит через верх, и UIToolbar, который является полосой, которая появляется в нижней части. UIToolbar, по умолчанию, установлен на скрытый, но вы получаете UIToolbar бесплатно каждый раз, когда создаете UINavigationController (см. Ссылку UINavigationController в XCode).

Демонстрация Apple NavBar показывает, как поместить UISegmentedControl в UINavigationBar. Вместо заголовка используйте пользовательский titleView для отображения сегментированного элемента управления:

fwc.navigationItem.titleView = sortToggle;

Если вы хотите добавить свой UIBarButtonItem в UINavigationBar, вы можете использовать:

fwc.navigationItem.rightBarButtonItem = add;

Обратите внимание, что на самом деле вы не должны пытаться настроить панель навигации UINavigationController самостоятельно. Правильный способ настройки состоит в том, чтобы отдельный контроллер представления имел доступ к своему собственному навигационному элементу и устанавливал для titleView и rightBarButtonItem нужные элементы.

Если вы хотите решить проблему с помощью UIToolBar, а это означает, что ваши элементы появятся в нижней части экрана, вы можете сделать что-то вроде этого:

// Assume UIBarButtonItem *add, UIBarButtonItem *sortToggleButtonItem, 
// and UIBarButtonItem *flexibleSpaceButtonItem are allocated
[fwc setToolbarItems:[NSArray arrayWithObjects:
                 flexibleSpaceButtonItem,
                 sortToggleButtonItem,
                 flexibleSpaceButtonItem,
                 add,                    
                 nil]];
[feedingNavController setToolbarHidden:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...