UISegmentedControl, встроенный в UINavigationBar / Item - PullRequest
8 голосов
/ 11 декабря 2010

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

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

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

Как бы я добавил UISegmentedControl к центру UINavigationController, который оборачивает содержимое моего всплывающего окна.

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

1 Ответ

21 голосов
/ 11 декабря 2010

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

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

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

- (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 в сегментированный элемент управления.Это работает для вас?

...