2012-07-01 14 views
11

ここに私のコードです。私は、開始ボタンrootviewControllerに戻るボタンを入れたいと思います。 UINavigationControllerでの戻るボタンのUINavigationControllerのRootViewControllerに戻るボタンを表示するには?

- (void)selectSurah:(id)sender { 

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil]; 
    [email protected]"Surah"; 

    s[email protected]"Back"; 

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController]; 

    [self presentModalViewController:aNavigationController animated:YES]; 
} 
+0

どこに戻る? – jarryd

+2

答えは明らかです。 presentModalViewControllerが呼び出されたところに戻ります。下記の@Flex_Addicted answerを参照してください。 – shaikh

答えて

8

UIBarButtonItemのカスタムビューとして追加:

UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom]; 
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal]; 
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b]; 

のに適したPSD iOSのUI要素はhereです。

+0

ありがとうございます。 – shaikh

2

外観と動作はUINavigationControllersのスタック間の相互作用に依存しています。最初のコントローラーに戻るボタンを置くと、この規約が破られ、戻ることはありません。そのため、コードが機能しません。

手動のようなタイトルバーコードにUIBarButtonItemを追加する必要があります

:あなたは本当にそれがバックボタンに見えるようにしたい場合は、手動で画像をUIBarButtonItemを作成する必要があります

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 

戻るボタンを反映しています。

もう1つの提案ですが、戻るボタンを使用してモーダルビューコントローラを終了しようとしているように、私はモーダルビューを閉じるための「閉じる」または「完了」ボタンのような従来の方法に固執しますコントローラ。 UINavigationControllersのスタックをナビゲートするには、本当にバックボタンが適しています。 UIButtonとそれを私はそれがナビゲーションスタックからルートビューコントローラをポップすることができます信じていませんが、あなたは偽物でき

+1

+1の '閉じる'または '完了'ラベルの候補。 PSDのリンクに感謝 – shaikh

4

ナビゲーションコントローラのSurahTableViewControllerはルートビューコントローラなので、すでにそこにいるのでルートに戻ることはできません。あなたが何か他のものからモーダルそれを提示してきたので、あなたは呼び出すIBActionを持つナビゲーションバー上のボタンを配置する必要があります。

[self dismissModalViewControllerAnimated:YES]; 
5

Faizan、

Helium3コメントは理にかなっています。

私はあなたのボタンがモーダルに提示されたコントローラを却下するために必要であると思います、それは本当ですか?私が間違っていれば訂正してください。

UIBarButtonItemを新規作成し、UINavigationControllernavigationItemの左(または右)ボタンを設定することができます。カプセル化を中断しないようにするには、SurahTableViewControllerコントローラのviewDidLoadメソッドで作成します。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // make attention to memory leak if you don't use ARC!!! 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
      style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(close:)]; 
} 

-(void)close:(id)sender 
{ 
    // to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion 
    // dismissModalViewControllerAnimated: is deprecated 

    [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }]; 
} 
+0

これは完璧な答えです。超大作です。 – shaikh

+0

死んだスレッドを復活させて申し訳ありませんが、ちょうど注記:UINavigationController自体ではなく、UINavigationControllerに表示されるUIViewControllerにボタンを追加する必要があります。これは私に1時間ほどを費やしました:( – MacD

+0

@MadD遅れて申し訳ありません。どういう意味ですか?ボタンがナビゲーションバーに付いています。 –

関連する問題