8

UISegmentedControlトップバーのどこかにa を埋め込みたいとUINavigationController思います。

UIBarButtonItemに埋め込んで、左または右の barButtonItem として設定しても問題ありません。

iPhone の画面領域を扱う場合、このアプローチは理解できます。ただし、私は iPad のポップオーバーでこれを行っており、トップバーには「たくさんの」垂直方向のスペースがあります。segmentedControl を左または右の barButtonItem として追加すると、セグメント ボタンにテキストが表示されないように縮小され、「完了」ボタンなどの幅になります。 navigationItem TitleView は右端まで表示されますが、テキストを含む 3 セグメント コントロールを表示できる範囲を超えて縮小されます。

ポップオーバー コンテンツをラップUISegmentedControlする の中心に を追加するにはどうすればよいですか。UINavigationController

誰かが私を助けてくれることを願っています:)事前に感謝します。

4

1 に答える 1

21

コントロールをポップオーバー タイトル バーに配置する必要があるのはなぜですか? 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;
}

結果は次のとおりです。

代替テキスト 代替テキスト

sizeToFit私のコードには、セグメント化されたコントロールに送信する以外にトリックはありません。これはうまくいきますか?

于 2010-12-11T16:40:38.763 に答える