2010-07-25 4 views
0

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

/* Настройка навигации контроллер для кормления Tab */

// 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]; 
+0

Почему вы закомментировать себя линию .navigationItem.rightBarButtonItem = добавить? –

ответ

1

Для того, чтобы использовать 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]; 
+0

Благодарим за ответ, что вы предложили, но я предпочел бы, чтобы элемент пользовательского интерфейса находился сверху. Я решил просто добавить сегментированный элемент управления в верхней части представления и использовать его. Спасибо хоть. – adam0101