質問

「戻るボタン」 UINavigationController のデフォルトでは、スタック内の最後のビューのタイトルが表示されます。代わりに、戻るボタンにカスタムテキストを表示する方法はありますか?

役に立ちましたか?

解決

このリンク

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];

タイラーがコメントで言ったように:

  

これは可視のView Controllerではなく、ビューで行います   戻るボタンを押すと表示されるコントローラー

他のヒント

Interface Builderでテキストを設定できます:

戻るボタンが戻るViewControllerのナビゲーションアイテムを選択します。

ここに画像の説明を入力

ユーティリティパネルの属性インスペクターで、戻るボタンのラベルを入力します。

ここに画像の説明を入力

受け入れられた回答のようにコードでタイトルを設定するよりも、このアプローチを好むでしょう。

  

また、View Controllerで1レベル上でこれを行う必要があることに注意してください   スタック。言い換えれば、これを目に見えるView Controllerで行わないでください。   しかし、戻るボタンを押すと表示されるView Controllerで。
  -タイラー

これを使用:

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}

次のように、スタックに別のコントローラーをプッシュする前にコントローラーのタイトルを設定するだけで、これに対する便利な解決策を見つけました。

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];

次に、 viewWillAppear で次のように元のタイトルを設定してください:

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}

これは、プッシュ操作中に戻るボタンを作成する際の UINavigationController のデフォルトの動作が前のコントローラーのタイトルを使用することであるため、機能します。

戻るボタンのタイトルはデフォルトで前のビューのタイトルになっているため、私が使用する簡単なトリックは、前のビューの.mファイルに次のコードを配置することです。

-(void)viewWillAppear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Original Title";
}

-(void)viewWillDisappear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Back";
}

initメソッドで、次のコードを追加します:

- (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super init]) {

        //...

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

        //...
    }
    return self;
}

次に、viewcontrollerの終了を許可するための簡単なメソッドを追加します。

-(void)goBack {
    [self.navigationController popViewControllerAnimated:YES];  
}

viewDidLoadまたはloadViewに次のコードを追加します

self.navigationController.navigationBar.topItem.title = @"Custom text";

iOS 9を搭載したiPhoneおよびiPadでテストしました

手綱の答えに追加。 Appleのドキュメントから、 backBarButtonItem の宣言は次のとおりであることに注意してください:

@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem

したがって、合成されたセッターは渡したインスタンスを retain するため、手綱の答えはメモリをリークします。これを解決するには、 autorelease

を使用します。
 self.navigationItem.backBarButtonItem = 
      [[[UIBarButtonItem alloc] initWithTitle:@"Custom Title" 
         style:UIBarButtonItemStyleBordered
         target:nil
         action:nil] autorelease];  //<-- autoreleased

またはインスタンスで変数を指定して、後で明示的に解放できるようにすることもできます。

UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];

これがお役に立てば幸いです!

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];
}

私は何か面白いものを発見しました。 UINavigationController をサブクラス化し、 pushViewController:animated:メソッドをオーバーライドして、次のようなことを行う場合:(ARCを使用していることに注意してください)

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
 initWithTitle: @"Back" 
 style: UIBarButtonItemStyleBordered
 target: nil action: nil];

viewController.navigationItem.backBarButtonItem = backButton;

[super pushViewController:viewController animated:animated];

次に、Navigation Controllerでプッシュされるすべての ViewControllers には、「戻る」があります。それらのボタンを自動的に。特定のView Controllerのテキストを変更したい場合は、ViewControllerを特定のクラスまたは独自のカスタムプロトコル(ViewControllerが継承する backButtonText などのメソッドを持つ可能性があるもの)にキャストしてみてくださいそのような愚かな)それはあなたがあなたのために戻るボタンのテキストをカスタマイズできるように、入ってくるviewcontrollerに関する特定の情報を与えることができます。これで、戻るボタンのテキストは、責任を負うべき場所で処理されます。テキストを変更するための新しいボタンを作成するのは面倒ですが、そうですね。

誰もこのようなことをしない理由を考えることができますか?少なくとも、ViewControllerのタイトルをいじったり、Navigation ControllerのViewControllerを押す前に新しい戻るボタンを作成することを覚えておく必要はありません。

手綱の答えはうまくいきます。

複数のView Controllerをプッシュすると、変更された戻るボタンのタイトルがそれぞれに表示されることに注意してください。

その場合、View ControllerをプッシュするたびにカスタムUIBarButtonItemを作成する必要があります。

また、View Controllerをプッシュする前に 必ず実行してください。そうしないと、タイトルが変更されると画面が乱れます。

Aubreyの提案を拡張して、子View Controllerでこれを行うことができます。

親のnavigationItem.titleと親のnavigationItemの古い値を保存するための2つの変数を作成します

UINavigationItem* oldItem;
NSString* oldTitle;

viewDidLoad で、次を追加します。

oldItem = self.navigationController.navigationBar.topItem;  
oldTitle = oldItem.title;  
[oldItem setTitle: @"Back"];  

viewWillDisappear で、次を追加します。

[oldItem setTitle: oldTitle];  
oldTitle = nil;  // do this if you have retained oldTitle
oldItem = nil;   // do this if you have retained oldItem

完全ではありません。新しいコントローラーがアニメーション化されると、親ビューのタイトルが変わります。ただし、これにより、戻るボタンにカスタムラベルを付けて、標準の戻るボタンのような形に保つという目標が達成されます。

これを viewDidLoad に入れて、探しているものになることを期待してください

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];

ARRIVINGコントローラーでタイトルを設定する場合(より多くのロジック..) swift 3で:

func setBackButtonNavBar(title: String, delay: Double){

    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in

        if let navBar = self.navigationController?.navigationBar{
            navBar.backItem?.title = title
        }
    })

}

今後のコントローラーで:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setBackButtonNavBar(title: "back", delay: 0.3)
}

通常、コントローラ拡張にself.setBackButtonNavBarを配置します。

これは古い質問であり、回答の種類が更新されていることを知っています!

簡単な方法は、親ViewControllerでこれを行うことです:

i.e次のView Controllerに移動するもの。

self.navigationItem.backBarButtonItem  = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)

これをコードで行うと、 UINavigationConroller の戻るボタンスタイルが削除されます。各ビューにナビゲーションアイテムを追加する場合、 StoryBoard でバックボタンのタイトルを設定できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top