18

これが私のコードです。オープニングのrootviewControllerに戻るボタンをつけたいです。

- (void)selectSurah:(id)sender {

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil];
    surahTableViewController.navigationItem.title=@"Surah";

    surahTableViewController.navigationItem.backBarButtonItem.title=@"Back";

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

    [self presentModalViewController:aNavigationController animated:YES];   
}
4

6 に答える 6

10

ナビゲーション スタックからルート ビュー コントローラーをポップすることはできないと思いますが、 aUIButtonのカスタム ビューとして追加されたを偽造することはでき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];

iOS UI 要素の適切な PSD は、ここで見つけることができます。

于 2012-07-01T15:50:37.547 に答える
6

ファイザン、

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

モーダルに表示されたコントローラーを閉じるにはボタンが必要だと思いますが、本当ですか? 私が間違っている場合は修正してください。

その場合、新しいUIBarButtonItemを作成して、 の左 (または右) ボタンを設定できますUINavigationController navigationItem。カプセル化を壊さないようにするにはviewDidLoad、コントローラーのメソッドでカプセル化を作成しますSurahTableViewController

- (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"); }];
}
于 2012-07-01T15:54:04.407 に答える
4

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

[self dismissModalViewControllerAnimated:YES];
于 2012-07-01T15:51:26.920 に答える
3

UINavigationController の戻るボタンの外観と動作は、UINavigationController のスタック間の相互作用に依存します。最初のコントローラーに戻るボタンを配置すると、この規則が破られます。戻るものは何もないため、コードが機能しません。

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

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

本当に戻るボタンのように見せたい場合は、戻るボタンを反映したイメージで UIBarButtonItem を手動で作成する必要があります。

ただし、戻るボタンを使用してモーダル ビュー コントローラーを閉じようとしているように見えるので、別の提案として、モーダル ビュー コントローラーを閉じるには、「閉じる」または「完了」ボタンなどのより一般的なものを使用します。戻るボタンは、UINavigationControllers のスタックをナビゲートするのにより適しています。

于 2012-07-01T15:49:54.037 に答える
0

Swift の場合は、次のようにしてください。

override func viewDidLoad() {
    super.viewDidLoad();
    self.navigationItem.hidesBackButton = true;
    let backButton = UIBarButtonItem(
        image: UIImage(named: "my_back_asset"), style: .plain,
        target: self, action: #selector(self.onBack));
    self.navigationItem.leftBarButtonItem = backButton;
}

@objc private func onBack() {
    let controller = self.navigationController?.popViewController(animated: true);
    if controller == nil {
        // Handle pressing back when on root here.
    }
}

my_back_asset" " を独自の戻るボタンの画像に変更することに注意してください。

于 2021-12-11T20:07:58.130 に答える