Добавить кнопку в панель просмотра «Заголовок / Заголовок» - PullRequest
0 голосов
/ 25 ноября 2010

В моем AppDelegate я динамически создаю UITabBarController и UINavigationController.Затем я добавляю к нему 3 вида.

// Prepare the tab bar controller   
tabBarController = [[UITabBarController alloc] init];

// Switch controller
UserSettingsController *settingsController = [[UserSettingsController alloc] init];

// Switches controller
SwitchesController *switchesController = [[SwitchesController alloc] init];

// Help controller
HelpController *helpController = [[HelpController alloc] init];

NSArray *controllers = [NSArray arrayWithObjects: switchesController, settingsController, helpController, nil];
tabBarController.viewControllers = controllers; 

if (self.navigationController == nil) {
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:tabBarController];
}

[window addSubview:navigationController.view];

Когда я первоначально сделал это, я заметил, что теперь у меня есть заголовок / строка заголовка вверху моей страницы.Это пустое и действительно просто занимает место.Я хотел бы использовать его и добавить кнопку «обновить» в одно из моих представлений.

В представлении, которое меня интересует, я попытался сделать следующее:

-(void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithTitle:@"Refresh" style:UIBarButtonItemStylePlain target:self action:@selector(refreshSwitches:)];
    self.navigationItem.rightBarButtonItem = refresh;
    [refresh release];
}

-(void)refresh{
    ...
}

Ни одна кнопка не появилась, так что я либо ушел, либо что-то упустил.

Есть предложения?

Спасибо

1 Ответ

0 голосов
/ 26 ноября 2010

Я считаю, что проблема заключается в том, что ваши контроллеры представления, которые вы добавили в контроллер вкладок, не инкапсулированы контроллерами навигации.Хотя ваш UITabBarController имеет контроллер навигации, он неявно предоставляет все свои контроллеры навигации вкладок (и без контроллера навигации, контроллер вида navigationItem ничего не будет делать). Чтобы исправить эту проблему, я бы предложил инкапсулировать ваше представлениеконтроллеры с навигационным контроллером при инициализации:

пример:

UserSettingsController *settingsController = [[UserSettingsController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settingsController];
[settingsController release];

// etc...

NSArray *controllers = [NSArray arrayWithObjects:navController, ..., ..., nil];
tabBarController.viewControllers = controllers;

// Release your nav controllers, other cleanup

РЕДАКТИРОВАТЬ

Хорошо, я думаю, у меня есть лучшее представление о вашей настройке сейчас,Я смог заставить работать следующее:

self.tabBarController.navigationItem.rightBarButtonItem = myButton;

Важным предупреждением этого является то, что кнопка будет сохраняться во всех представлениях вашего tabbarcontroller, если вы явно не удалите ее.Это может раздражать / неуместно поддерживать, но я не уверен в другом решении, если представление, которое вы хотите иметь для кнопки, не связано напрямую с самим контроллером навигации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...