-1

iPad のツールバーに UISegmentedControl を追加すると、奇妙な問題が発生します。次のメソッドを持つルートコントローラーで UINavigationController を作成しました。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    UINavigationController *navigationController = [self navigationController];
    navigationController.toolbar.barStyle = UIBarStyleBlackOpaque;
    navigationController.toolbarHidden = NO;
}

- (NSArray *)toolbarItems
{
    UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:NULL];
    return [NSArray arrayWithObjects:[self segmentedControlItem], flexibleSpace, nil];
}

- (UISegmentedControl *)segmentedControl
{
    if (_segmentedControl) {
        return _segmentedControl;
    }

    NSArray *items = [NSArray arrayWithObjects:@"Segment 1", @"Segment 2", nil];
    _segmentedControl = [[UISegmentedControl alloc] initWithItems:items];
    _segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

    return _segmentedControl;
}

- (UIBarButtonItem *)segmentedControlItem
{
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl];
    buttonItem.style = UIBarButtonItemStyleBordered;
    return buttonItem;
}

ただし、コントローラーが表示された後、segmentedControl はツールバーに表示されません。修正方法は?ツールバー項目に segmentedControl が存在すること、サイズがあり、非表示になっていないことは既に確認済みですが、それでも表示されません。

(lldb) po [[[[[self navigationController] toolbar] items] objectAtIndex:0] customView]
(id) $3 = 0x08e39a10 <UISegmentedControl: 0x8e39a10; frame = (7 8; 300 30); opaque = NO; layer = <CALayer: 0x8e63230>>
4

1 に答える 1

0

回避策があります。ツールバー- (NSArray *)toolbarItemsに追加したい場合は、上書きするのは安全ではないようです。UISegmentedControlコントローラーがロードされた後、どこかにツールバーを構成するメソッドを追加することをお勧めします。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self configureToolbar];
}

- (void)configureToolbar
{
    UINavigationController *navigationController = [self navigationController];
    navigationController.toolbar.barStyle = UIBarStyleBlackOpaque;
    navigationController.toolbarHidden = NO;
    // Add toolbar items here
    UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:NULL];
    self.toolbarItems = [NSArray arrayWithObjects:[self segmentedControlItem], flexibleSpace, nil];
}

このアプローチにより、結果を得ることができます

于 2012-08-16T13:04:26.840 に答える