3

UISegmentedControl現在、View Controllerのメソッドでプログラムで作成し、viewDidLoadに割り当てることでViewControllerのナビゲーションバーに追加していますself.navigationItem.titleView

それは十分に簡単ですが、私はInterface Builderでもこれを実行できるようにしたいと思っており、これまでのところその方法を理解できていません。グーグルもあまり役に立たなかった。誰かがIBでこれを行う方法を説明したり、オンラインの例を指摘したりできますか?とても感謝しています。ありがとう、ハワード

4

5 に答える 5

6

ペン先にナビゲーションスタック全体がある場合、実際には非常に簡単です。タイトル領域にドラッグするだけで、IBが自動的に正しい処理を実行します。

それ以外の場合は、セグメント化されたコントロールをペン先(必ずしもサブビューである必要はありません)に追加@property IBOutletしてから、ViewControllerからそれに追加することができます。次に、viewDidLoadで、通常どおりtitleViewに割り当てます。忘れずにdeallocでリリースしてください。そうすれば、あなたは黄金になります。

于 2009-07-19T23:10:54.467 に答える
1

IBでは、ビューをナビゲーションコントローラーの中央にドラッグするだけで、1つのナビゲーションアイテムのすぐ内側にある場合は正常に機能します。

ただし、同じビューオブジェクト参照を異なるナビゲーションアイテムのタイトルビュー領域にドラッグすると、ある時点でナビゲーションコントローラスタックにプッシュされるため、スタックを戻ったときにタイトルビューが表示されなくなるという問題が発生します。ナビゲーションコントローラーは、何らかの理由で複数のナビゲーションアイテムに表示される同じオブジェクトへの参照にあまり満足しておらず、面倒なナビゲーションアイテムを使用してビューに戻ったときにのみフィットをスローします。

これを回避するには、共有タイトルビューオブジェクト参照を使用してビューに移動するときに、titleViewオブジェクトを明示的に設定および設定解除する必要があります。たとえば、サブクラス化されたビューの背後に、一度だけインスタンス化する必要があるtitleViewとして設定されたカスタムロジックがある場合です。

于 2009-11-12T23:05:23.270 に答える
1

UISegmentedControlまたは、 IBで設計されたものを独自のNIBに保存することもできます。次に、FileOwnerをsegmentedControlインスタンスを使用するviewcontrollerクラスに設定します。viewcontrollerクラスで、segmentedcontrolをIBOutletプロパティとして宣言し、それをnibのインスタンスにリンクします。

設計されたインスタンスを使用するために残されているのは、次を呼び出すことだけです。

[[NSBundle mainBundle] loadNibNamed:@"TTCustomSegmentedControl"
                              owner:self
                            options:nil];
self.navigationItem.titleView = sortSegmentControl;    
于 2011-07-09T00:25:06.540 に答える
1

これを試してみてください(私にとってはうまくいきます):

UISegmentedControl *mSegmentedControl = [[UISegmentedControl alloc] initWithItems:
                                            [NSArray arrayWithObjects:
                                             @"Segment 1",
                                             @"Segment 2",
                                             nil]];

mSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
mSegmentedControl.tintColor = [UIColor redColor];

[mSegmentedControl setSelectedSegmentIndex:0];


[mSegmentedControl addTarget:self action:@selector(sectionPress:) 
           forControlEvents:UIControlEventValueChanged];

self.navigationItem.titleView = mSegmentedControl;
于 2013-01-04T12:22:38.480 に答える
0

IBでプロパティを設定することはできませんがtitleView、Interface Builderを介してコントローラーのビューの子としてコントロールを作成/設定し、viewDidLoadメソッドでビューから削除してtitleViewとして設定できる場合があります。 :

[segControl removeFromSuperview];
self.navigationItem.titleView = segControl;
于 2009-07-19T20:41:13.973 に答える