UINavigationControllerとそのRootViewControllerをIBで設定する正しい方法

私は私のiPadアプリに次の構造を持っています:

  • Application
    • UINavigationController (Providing the top bar with UIBarButtons etc.)
      • Initial Login screen
      • Second login screen

私はこれをInterfacebuilderで正しく設定する必要があるかどうかはわかりません。私の推測では、2つのViewControllerを作成することになります。

  1. LoginVC1: (This one should also include the NavigationController since it is the first of the two screens)
  2. LoginVC2: Based on some delegate callback from LoginVC1 my application would push to this ViewController.

This is my LoginVC1 in IB: LoginVC1 http://k.minus.com/jpamEAFkBjpKT.png

And when I present it modally it looks like this which is not what I want: Result http://k.minus.com/jHAYRnY788jFt.png

結果:

  • ViewControllerのタイトルもキャンセルボタンも表示されません。
  • IBで私の見解にもかかわらず、ビューが空であるようです
  • UINavigationController のプレゼンテーションモードを FormSheet に設定しました。これはフルスクリーンで表示されているので無視されます。

私は間違って何をしていますか?

0
たぶん私はちょうど2つの画像を "Find the error"というテキストで掲示しておかなければならないでしょう:-)
追加された 著者 Besi,
@Kjuly私は単にダイアログを表示するために presentModalViewController を実行しますが、私のUINavigationControllerにはUIViewController(nib-screen参照)が含まれているので、モーダルが表示されているときにこのViewControllerが表示されると思います。
追加された 著者 Besi,
rootViewController をnavigationBarControllerとして設定しましたか?
追加された 著者 Kjuly,
私が逃したメッセージ!私はとても残念です..あなたはまだそれを解決しましたか?たぶんあなたは@ CodaFiの答えを受け入れるべきです。 :p
追加された 著者 Kjuly,

1 答え

Kjuly私はpresentModalViewControllerを使ってダイアログを表示しますが、   私のUINavigationControlerにはUIViewControllerが含まれているので   ペン先スクリーン)、私はこのViewControllerが表示されると仮定します   モーダルが表示されます。

必ずしもBesiではない。それをUINavigationController階層に追加すると、rootViewControllerとしてisは追加されません。これは次のようなコードで行う必要があります:

UIViewController *rootViewController = [[[ExamplesViewController alloc] init] autorelease];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

また、ViewControllerではなく、NavigationControllerをモーダルで表示していることを確認してください。

NavigationBarのタイトルの問題を解決するには、 self.title プロパティを

-(void)viewDidload method and see if that works. If not, try self.//instance of UINavigationController//.navigationBar.title = @"string".

他のボタンは表示されませんが、私の推測では、コード内のルートコントローラーを設定しても問題が解決しない場合は、インスタンス化する代わりに.hで参照するだけです。だから、このような何かを.h:

//.h
@implementation ExampleViewController: UIViewController  {

     IBOutlet UIBarButtonItem * CancelButton;
     IBOutlet UITextField * usernameField;
     IBOutlet UITextField * passwordField;
     IBOutlet UIButton * loginButton;
}
@property (nonatomic, retain) IBOutlet UIBarButtonItem * CancelButton;
@property (nonatomic, retain) IBOutlet UITextField * usernameField;
@property (nonatomic, retain) IBOutlet UITextField * passwordField;
@property (nonatomic, retain) IBOutlet UIButton * loginButton;

次に、コンセントをXIBに接続するか、.m内のボ​​タンをインスタンス化します。

//.m 

-(void)viewDidLoad {

//do stuff
    CancelButton = [[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(dismissSelf)]autorelease];

//do more stuff

}
1
追加された