Настройка titleView в UIPopoverController - PullRequest
7 голосов
/ 18 мая 2011

В приложении для iPad я хочу, чтобы в верхней панели всплывающего окна было несколько кнопок. Я запускаю это так:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];

pop = [[UIPopoverController alloc] initWithContentViewController:nc];
[pop presentPopoverFromRect:CGRectInset([tableView rectForRowAtIndexPath:indexPath], 10, 10)
                     inView:tableView
   permittedArrowDirections:UIPopoverArrowDirectionAny
                   animated:YES];
pop.delegate = self;
[nc release];

В viewDidLoad я хочу установить titleView, чтобы содержать несколько UIBarButtonItems. Это нормально для обычного UINavigationController, но мне нужно иметь возможность сделать это и сохранить собственный стиль панели навигации на всплывающем окне.

Я попытался настроить rightBarButtonItem на панель инструментов, содержащую кнопки, но они принимают формат панели инструментов, который сам по себе не принимает формат / стиль всплывающего окна.

Ответы [ 4 ]

1 голос
/ 26 июня 2011

Это немного хакерски, но вы можете создать действительно прозрачный UIToolbar, создав подкласс и переопределив drawRect: с пустым методом.Это все равно будет рисовать UIBarButtonItems на панели инструментов, но не на самой панели инструментов.

Затем, как описывает Нильс, вы можете создать элемент кнопки панели из пользовательского экземпляра панели инструментов и добавить его как rightBarButtonItem.

0 голосов
/ 27 мая 2011

Сначала вам нужно установить делегата для UINavigationController, а затем реализовать nabigationController: willShowViewController: animated: метод.В этом методе вы можете настроить элементы кнопок левой и правой панели.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

    viewController.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] 
                                                        initWithTitle:@"Image Source" 
                                                        style:UIBarButtonItemStylePlain 
                                                        target:self 
                                                        action:@selector(cancelPressed)] autorelease]; 
}
0 голосов
/ 01 июня 2011

У меня была та же проблема, и вот что я сделал:

UIBarButtonItem *uiBarRefresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(forcerefresh)];
UIBarButtonItem *uiBarCurl = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPageCurl target:self action:@selector(showlist)];

UIToolbar_transparent* tools = [[UIToolbar_transparent alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)];
tools.barStyle = UIBarStyleBlackTranslucent;
tools.translucent = YES;
tools.backgroundColor = [UIColor clearColor];
tools.tintColor = self.navigationController.navigationBar.tintColor;
[tools setItems:[NSArray arrayWithObjects:flexItem,uiBarRefresh,uiBarCurl,nil] animated:NO];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];

Таким образом, вы избегаете тускло-серого фона, надоедливого белого подчеркивания и можете полностью настроить, как вы хотите, чтобы они располагалисьиспользуя фиксированные или гибкие расстояния.

Желаем удачи в вашем проекте:]

0 голосов
/ 25 мая 2011

Почему вы не используете пользовательский UIView с UIToolbar или UINavigationBar вместо UIPopoverController?

Эффект, такой же !

...