199

私がやりたかったのはUIBarButtonItem、ナビゲーションバーに青いシェブロンだけを残して、の「戻る」ボタンからテキストを削除することです。私は iOS 7 向けに開発していることを覚えておいてください。次のようないくつかの方法を試しましたが、これらに限定されません。

これは私が気に入らなかった画像方法です (画像が場違いに見えました):

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

私が試した別の方法はこれでした。これは単に機能しませんでした(何も表示されませんでした):

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title=@"";
self.navigationItem.leftBarButtonItem=barBtn;

私が実現したかったのは、iOS 7 のミュージック アプリにある戻るボタンのようなもので、1 つのシェブロンしかありませんでした。

ありがとう。

4

39 に答える 39

412

タイトルを変更せずにView Controllerの戻るボタンのタイトルを設定するには:

目的 C:

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

迅速:

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

明確にするために、これは、戻るボタンを押した場合に表示されるView Controllerで行われます。つまり、'< Settings' を表示する代わりに '<' だけを表示したい場合は、SettingsViewController でこれを に配置しますinit。そうすれば、View Controller自体を見ているときにタイトルが表示されないという問題は発生しません。

于 2014-05-05T04:56:55.543 に答える
198
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

次に、戻るボタンのアイテムのタイトルを削除できます。

Storyboard を使用する場合、ナビゲーション属性インスペクタ Back Button をスペースで設定できます。

于 2014-01-08T03:35:55.240 に答える
128

ストーリーボードを使用している場合Attributes Inspectorは、ViewController のNavigation Item( をクリックNavigation Bar) に移動し、Back Buttonプロパティを " " (1 つのスペース文字) に設定できます。これにより、戻るボタンのタイトルが 1 つのスペース文字に設定され、シェブロンが表示されたままになります。コードをいじる必要はありません。

サンプル画像

これにより、このコントローラー内に表示されるのタイトルではなく、その上にプッシュされたものからこのビュー コントローラーに続く [戻る] ボタンのBack Buttonタイトルが設定されることに注意してください。Back Button

于 2013-11-28T10:57:59.160 に答える
28

ここに画像の説明を入力

状況に応じて物事を見ることが役立つ場合があります。これは、「戻る」テキストを非表示にしながら矢印を表示する最小限のプロジェクトです。

絵コンテ

ここに画像の説明を入力

[Show Second View Controller] ボタンから 2 番目のビュー コントローラーへのショー セグエがあります。

また、2 番目のビュー コントローラーにナビゲーション アイテムを追加して、タイトルを付けました。これはオプションです。戻るボタンには影響しません。

コード

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

別の方法 (IB のみ、コードなし)

ストーリーボードで、最初のビュー コントローラー (2 番目ではなく)のナビゲーション項目を選択します。戻るボタンのテキストにスペースを入力するだけです。

ここに画像の説明を入力

于 2016-05-20T02:59:42.080 に答える
27

ボタンのタイトルを設定するときは、@"" の代わりに @" " を使用します。

- 編集 -

他の弦を試してみて何か変化はありますか? 私は次のコードを自分でうまく使用しています:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString は、iOS 7 またはそれ以前のバージョンを使用しているかどうかに応じて、@" " または @"Back" に設定される変数です。

注意すべきことの 1 つは、このコードが、戻るボタンをカスタマイズしたいページのコントローラーにないことです。実際には、ナビゲーション スタックの前にコントローラーにあります。

于 2013-09-29T16:26:45.780 に答える
15
self.navigationController.navigationBar.topItem.title = @"";
于 2015-08-05T22:09:16.577 に答える
11

iOS7 では、Apple は UINavigationBar に「backIndicatorTransitionMaskImage」と「backIndicatorImage」という 2 つの新しいプロパティを導入しました。

一度呼び出すだけで:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

デフォルトのシェブロン グリフの代わりにカスタム イメージをレンダリングし、keyWindow の色合いを継承します。

そして、タイトルを削除するために、カマロスの答えを提案します. 新しいView ControllerをプッシュしているView Controllerでこのコードを呼び出すことを忘れないでください。iOS UIBarButtonItem のタイトル テキストを削除する

于 2013-10-22T15:37:05.507 に答える
10

提供された回答ではあまり成功しませんでしたが、本当に簡単な回避策を見つけました。ストーリーボードで、UIViewController のナビゲーション項目をクリックして、戻るボタンのテキストを設定できます。単一の ' ' スペースに設定すると、探していた動作が得られました。ここに画像の説明を入力

于 2014-04-25T22:11:56.703 に答える
10

これはiOS10でうまくいきました。ビューコントローラのviewDidLoadから呼び出します。

self.navigationController?.navigationBar.topItem?.title = ""
于 2017-02-24T21:08:28.113 に答える
6

実際には、たった 1 つのトリックでこれを行うことができます。

クラスをオーバーライドUINavigationBarして、次のコード行を追加します。

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

次にUINavigationController、このカスタム UINavigationBar クラスで初期化します。UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

お役に立てれば

于 2014-07-04T10:45:58.487 に答える
6

iOS7 と 6 で動作するこの問題の簡単な解決策は、viewDidLoad でカスタム タイトル ビューを設定することです。

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

次に、viewWillAppear: で安全に呼び出すことができます

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

タイトル ビューはカスタム ビューであるため、ナビゲーション スタックに戻っても上書きされません。

于 2013-12-06T09:01:39.257 に答える
5

DonnaLea の回答を使用して、何かをまとめることができました。これは、UIViewController サブクラスでソリューションがどのように表示されるかです。

var backItemTitle:String?

override func viewDidLoad() {
    super.viewDidLoad()

    //store the original title
    backItemTitle = self.navigationController?.navigationBar.topItem?.title

    //remove the title for the back button
    navigationController?.navigationBar.topItem?.title = ""
}

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {

        //restore the orignal title
        navigationController?.navigationBar.backItem?.title = backItemTitle
    }
}

元の回答の問題は、コントローラーに戻ったときにコントローラーからタイトルが削除されることです。viewWillDisappear でタイトルをリセットしようとしても、移行プロセスでは遅すぎます。うまくアニメーション化するのではなく、タイトルが元に戻ります。ただし、 willMoveToParentViewController はより早く発生し、正しい動作が可能になります。

警告: 通常の UINavigationController プッシュ/ポップでのみこれをテストしました。他の状況では、追加の予期しない動作が発生する可能性があります。

于 2015-04-28T15:58:28.307 に答える
4

最初の ViewController の prepareForSegue: メソッドで、そのビューのタイトルを @"" に設定すると、次のビューがプッシュされると、以前の ViewController のタイトルが @"" に表示されます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

これに関する唯一の問題は、戻るボタンを押したときに前のビューにタイトルがないため、viewWillAppear で再度追加できることです。

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

私はこの解決策があまり好きではありませんが、うまくいき、それを行う他の方法が見つかりませんでした。

于 2013-10-29T05:02:57.783 に答える
3
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];
于 2015-10-28T06:46:40.783 に答える
3

答えのどれも私を助けませんでした。しかし、トリックがありました-プッシュする直前に、プッシュしたビューコントローラーのタイトル(戻るボタンがどこにあるのか)をクリアしました。

そのため、前のビューにタイトルがない場合、iOS 7 の戻るボタンには矢印のみが表示され、テキストは表示されません。

viewWillAppearプッシュ ビューのオンに、元のタイトルを戻しました。

于 2013-10-16T12:56:46.983 に答える
3

これは、サブクラスを使用しnavigationControllerて「Back」を削除します。

これを使用して、アプリから永久に削除しています。

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                       style:UIBarButtonItemStylePlain
                                                                                      target:nil
                                                                                      action:nil];
}

@end
于 2015-07-06T03:35:46.283 に答える
2

ナビゲーションバーの戻るボタンのタイトルを隠す

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;
于 2016-03-27T07:59:02.033 に答える
2

これが私がやっていることです。これは、戻るボタンのタイトルを削除する方が簡単です

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}
于 2016-10-19T09:42:03.430 に答える
1

グローバルに完璧なソリューション

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    return true
}
于 2016-03-31T02:44:32.870 に答える
1
case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }
于 2015-09-18T07:21:01.650 に答える
1

カスタム クラスを作成UINavigationControllerし、アプリ内のすべてのナビゲーション コントローラーに適用します。このカスタムUINavigationControllerクラス内で、ビューが読み込まれるとUINavigationBarデリゲートを設定します。self

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

次に、デリゲート メソッドを実装します。

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

このようにして、カスタム クラスをすべてのナビゲーション コントローラーに割り当てるだけで、すべての [戻る] ボタンからタイトルがクリアされます。viewWillAppearわかりやすくするために、ビューが表示される直前にタイトルが常に更新されるように、他のすべてのビューコントローラーのタイトルを常に設定します (このようなトリックによって削除された場合)。

于 2016-04-19T15:54:42.387 に答える
0

iOS 11 では、次のコードを使用して戻るボタンのタイトルを非表示にできます。

迅速:

UIBarButtonItem.appearance().setTitleTextAttributes([ NSForegroundColorAttributeName : UIColor.clear ], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([ NSForegroundColorAttributeName : UIColor.clear ], for: .highlighted)

このコードは、ナビゲーション バーからタイトルを削除しませんが、透明にするだけで、戻るボタンにはまだタイトルのスペースがあります。ビュー コントローラーのタイトル用にさらにスペースが必要な場合は、別のソリューションを使用する必要があります。

于 2017-09-27T07:45:30.117 に答える
0

Guto Araujo の答えを使用して動作させることができませんでしたnavigationBar.topItem.title = @"";

ただし、 View Controllerself.title = @""のメソッドを設定することで、目的の効果を得ることができました。(設定は重要で、機能しません。)initinitviewDidLoad

于 2014-07-02T21:05:36.143 に答える
-3

UIBarButtonItem の外観のオフセットを設定するだけです。

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000)
                                                     forBarMetrics:UIBarMetricsDefault];
于 2014-07-29T10:59:20.863 に答える
-3

これはiOS 7以降でうまくいきました:

ビューでDidLoad:

self.navigationItem.backBarButtonItem.title = @" ";

はい、それは引用符の間のスペースです。

于 2014-10-20T16:36:38.797 に答える