2010-12-11 3 views
8

Я хотел бы вставить UISegmentedControl где-то в верхнюю панель моего UINavigationController.UISegmentedControl, встроенный в UINavigationBar/Item

Не проблема встраивать его в UIBarButtonItem и устанавливать его как левый или правый barButtonItem.

Я могу понять этот подход, имея дело с экранной недвижимостью iPhone. Я, тем не менее, делаю это в Popover на iPad, и в верхней панели есть «много» вертикального пространства. Если я добавлю segmentedControl как левый или правый barButtonItem, он будет уменьшен, так что я не могу видеть текст на моей кнопке сегмента, он становится шириной кнопки «Готово» и т. Д. Если я попытаюсь добавить ее в navigationItem TitleView будет отображаться полностью вправо и все еще сокращается больше, чем мой 3-сегментный элемент управления, который может отображать текст.

Как я могу добавить UISegmentedControl в центр UINavigationController, который обертывает содержимое моих popovers.

Надеюсь, что кто-то может мне помочь :) спасибо заранее.

ответ

21

Зачем вам нужно вводить элемент управления в строку заголовка popover? iPad имеет гораздо больше экранной недвижимости, чтобы рассмотреть вопрос о его размещении на виду ниже.

- EDIT -

Я пробовал сам, и это работает. Вот настройки контроллера поповер код:

- (IBAction) showPopover: (id) sender 
{ 
    TestController *testController = [[TestController alloc] initWithStyle: UITableViewStylePlain]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: testController]; 
    UIPopoverController *controller = [[UIPopoverController alloc] initWithContentViewController: navController]; 
    [controller presentPopoverFromBarButtonItem: sender permittedArrowDirections: UIPopoverArrowDirectionAny animated: YES]; 
    controller.delegate = self; 
    [testController release]; 
    [navController release]; 
} 

Здесь реализация TestController:

- (id) initWithStyle: (UITableViewStyle) style 
{ 
    if ((self = [super initWithStyle: style])) { 
     UISegmentedControl *ctrl = [[UISegmentedControl alloc] initWithFrame: CGRectZero]; 
     ctrl.segmentedControlStyle = UISegmentedControlStyleBar; 
     [ctrl insertSegmentWithTitle: @"One" atIndex: 0 animated: NO]; 
     [ctrl insertSegmentWithTitle: @"Two" atIndex: 0 animated: NO]; 
     [ctrl insertSegmentWithTitle: @"Three" atIndex: 0 animated: NO]; 
     [ctrl sizeToFit]; 
     // Any of the following produces the expected result: 
     self.navigationItem.titleView = ctrl; 
     //self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView: ctrl] autorelease]; 
     [ctrl release]; 
    } 
    return self; 
} 

Вот результат:

alt text alt text

Есть нет трюки в моем коде, кроме отправки sizeToFit в сегментированный элемент управления. Это работает для вас?

+0

Привет, он контекстуально принадлежит к бару, а не к содержанию. Точно так же, как это было бы бессмысленно, если бы Apple поставила сегментированное управление «следующее сообщение вверх/вниз» в почтовом приложении внутри выбранного письма. Или, если сегментный контроллер для сортировки списка был помещен в список. – RickiG

+0

Я вижу. Я отредактировал свой ответ с рабочим кодом и снимками экрана. Надеюсь, это поможет. – Costique

+0

Спасибо :) Это здорово, это вызов sizeToFit, который имеет значение. Еще раз спасибо. – RickiG

Смежные вопросы