Rimozione del testo del titolo di un UIBarButtonItem per iOS


198

Quello che volevo fare è rimuovere il testo dal pulsante 'Indietro' di a UIBarButtonItem , lasciando solo il gallone blu sulla barra di navigazione. Tieni presente che sto sviluppando per iOS 7. Ho provato diversi metodi, tra cui, ma non limitato a:

Questo è il metodo di immagine che non mi è piaciuto (l'immagine sembrava fuori posto):

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

Un altro metodo che ho provato è stato questo, che semplicemente non ha funzionato (non è stato visualizzato nulla):

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

Quello che volevo ottenere è qualcosa come i pulsanti posteriori presenti nell'app iOS 7 Music, che presentava solo un singolo chevron.

Grazie.



Perché non fotografi qual è il tuo requisito? E riferiscilo in leftBarButtonItem.
Vishal Sharma,

Il motivo per cui non ho usato il metodo immagine è 1. È molto difficile ottenere un'immagine perfetta del pulsante Indietro e 2. Ci sarà una qualche forma di disallineamento con l'immagine e non sembra naturale, ed è per questo Ho preso StackOverflow per un aiuto su come realizzare questo in modo nativo.
Pan Ziyue,

Risposte:


198
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

Quindi è possibile rimuovere il titolo dell'elemento del pulsante Indietro.

Se usi Storyboard, puoi impostare il pulsante Indietro della finestra di ispezione degli attributi di navigazione con spazio.


95
C'è un problema con i titoli di grandi dimensioni: non sono centrati ma spinti a destra, come se il testo del pulsante Indietro fosse ancora lì
sonxurxo

11
Questo non funziona se l'utente ha attivato "Accessibilità - Forme pulsante"
Mikael Bartlett,

22
Penso che questa sia una risposta migliore:[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
benjamin

19
Qualsiasi soluzione con numeri magici è una cattiva idea. Con la spinta all'autolayout, le classi di dimensioni, le funzioni di accessibilità, ecc. L'uso di valori costanti come questo è destinato a morderti.
Michael Peterson,

3
Per migliorare il commento di Benjamin, è necessario impostare questo per UIControlStateHighlightedcosì
n_b

411

Per impostare il titolo del pulsante Indietro per un controller di visualizzazione senza modificarne il titolo, utilizzare:

Objective-C:

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

Swift:

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

Per essere chiari, questo viene fatto sul controller di visualizzazione che vedresti se premi il pulsante Indietro. cioè invece di vedere '<Impostazioni' vuoi vedere solo '<' poi sul tuo SettingsViewController lo inseriresti nel tuo init. Quindi non si ottiene nessuno dei problemi del titolo che non viene visualizzato quando si guarda il controller di visualizzazione stesso.


1
Non so perché l'altra risposta sia contrassegnata come corretta, sta semplicemente rimuovendo il titolo in modo che il pulsante Indietro abbia un "titolo" da mostrare, ma non è affatto l'approccio corretto! Questa dovrebbe essere la risposta giusta.
Pach,

8
Anche per chiunque usi Swift, è navigationItem.backBarButtonItem = UIBarButtonItem (titolo: "", stile: .Plain, target: zero, action: nil). Non è difficile convertire da Obj-C a Swift, ma ti risparmierò il
disturbo

15
@BenjaminPiette lo stai chiamando su UIViewController che vedresti se premi il pulsante Indietro? Non UIViewController che visualizza il pulsante Indietro.
DonnaLea,

2
Che soluzione elegante! Grazie. Non era giusto fare la cosa di offset.
hyd00,

2
questa soluzione funziona perfettamente se si scrive questa riga di codice sul controller precedente nello stack di navigazione.
Bohdan Savych,

128

Se si utilizzano gli storyboard, è possibile selezionare Attributes InspectorViewController Navigation Item(fare clic su Navigation Bar) e impostare la Back Buttonproprietà su "" (un carattere spazio). Questo imposterà il titolo del pulsante Indietro su un carattere spazio, lasciando visibile il gallone. Non c'è bisogno di pasticciare con il codice.

immagine di esempio

Nota che questo imposterà il Back Buttontitolo del pulsante Indietro che seguirà questo View Controller da quello che è stato premuto sopra di esso, non per quello Back Buttonche verrà visualizzato all'interno di questo Controller!


10
Vorrei poter votare di più: "Nota che questo imposterà il titolo del pulsante Indietro per il pulsante Indietro che seguirà questo View Controller da quello che è stato premuto sopra di esso, non per il pulsante Indietro che verrà visualizzato all'interno di questo controllore!"
Jayson Lane,

121

Questo funziona per me per visualizzare solo il chevron 'indietro' senza alcun testo:

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

Imposta questa proprietà nel viewDidLoadView Controller che presenta la barra di navigazione e farà il trucco.

Nota: l'ho testato solo su iOS 7, che rientra nell'ambito della domanda.


33
Ciò ha un effetto collaterale nel rimuovere l'etichetta del titolo al centro della barra di navigazione.
Pwner

7
Impostare il titolo del VC push su "viewWillAppear" con la stessa proprietà. In questo modo non viene rimosso.
Guto Araujo,

5
Ho spostato quel pezzo di codice -viewDidLoadnel VC che non voglio il testo Indietro. Tuttavia, quello che ho scoperto in seguito è stato che quando ho estratto il 2 ° VC dal navigationControllertesto del titolo appare poco dopo, non immediatamente. Immagino che un video possa illustrarlo meglio, quindi eccolo qui: link
Pan Ziyue,

1
Questa non è la risposta migliore, fare riferimento alla risposta di andyleehao: [[UIBarButtonItem aspect] setBackButtonTitlePositionAdjustment: UIOffsetMake (0, -60) forBarMetrics: UIBarMetricsDefault];
lmnbeyond,

1
Questa è la risposta corretta secondo la documentazione di Apple: "Quando il destinatario si trova nello stack degli elementi di navigazione ed è il secondo dall'alto, in altre parole, il suo controller di vista gestisce le visualizzazioni a cui l'utente tornerebbe indietro - il valore in questa proprietà viene utilizzato per il pulsante Indietro nella barra di navigazione più in alto. Se il valore di questa proprietà è zero, il sistema utilizza la stringa "Indietro" come testo del pulsante Indietro. "
Raphael Oliveira,

27

Quando si imposta il titolo del pulsante, utilizzare @ "" anziché @ "".

--MODIFICARE--

Qualcosa cambia quando provi altre stringhe? Sto usando me stesso il seguente codice con successo:

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

backString è una variabile impostata su @ "" o @ "Indietro", a seconda che io sia su iOS 7 o una versione precedente.

Una cosa da notare è che questo codice non è nel controller per la pagina per cui voglio personalizzare il pulsante Indietro. In realtà è nel controller prima che sia nello stack di navigazione.


Hmm, iOS 7 non sembra cambiarlo. Continua a usare "Indietro" come titolo. Se setLeftBarButtonItem:backButtoninvece mettessi nulla non ci sarebbe.
Pan Ziyue,

1
In tal caso, e quando si imposta il titolo su qualcos'altro non succede nulla, penso che dovrete provare a spostare il codice sul controller della vista padre. Sto usando il codice che ho postato sopra nel mio metodo PrepForSegue.
Kamaros,

27

inserisci qui la descrizione dell'immagine

A volte è utile vedere le cose nel contesto. Ecco un progetto minimale che nasconde il testo "indietro" ma mostra ancora la freccia.

storyboard

inserisci qui la descrizione dell'immagine

C'è uno spettacolo che segue dal pulsante "Mostra controller della seconda vista" al controller della seconda vista.

Ho anche aggiunto un elemento di navigazione al controller della seconda vista in modo che abbia un titolo. Questo è facoltativo Non influisce sul pulsante Indietro.

Codice

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
}

Metodo alternativo (solo IB, nessun codice)

Nello storyboard selezionare l'elemento di navigazione per il controller della prima vista (non il secondo). Basta inserire uno spazio per il testo del pulsante Indietro.

inserisci qui la descrizione dell'immagine


Concetto chiave che "per il controller della prima vista (non il secondo)" come è il nome del VC che si desidera tornare, quindi è responsabilità assegnare questo titolo.
buguibu,

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

1
È possibile utilizzare backItem anziché topItem. TopItem nasconderà il titolo, mentre backItem nasconderà il titolo del pulsante Indietro.
Ravi Ojha,

2
Questa è l'unica soluzione se childViewController è in profondità 2+ nello stack dei figli di NavigationController
Nathaniel Blumer

2
Ciò rimuoverà anche il titolo del controller della vista precedente. Nella maggior parte dei casi, farà schifo
CalZone,

11

Su iOS7, Apple ha introdotto due nuove proprietà in UINavigationBar, 'backIndicatorTransitionMaskImage' e 'backIndicatorImage'.

Chiamando semplicemente una volta:

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

Verrà visualizzata un'immagine personalizzata anziché il glifo chevron predefinito, ereditando il colore della tinta della finestra chiave.

E per rimuovere il titolo, suggerirò la risposta di Kamaros. Ricorda di chiamare questo codice sul controller di visualizzazione che sta spingendo il tuo nuovo controller di visualizzazione. Rimozione del testo del titolo di un UIBarButtonItem per iOS


Per regolare il colore della tinta [[Aspetto UINavigationBar] setTintColor: [UIColor whiteColor]];
Mazen Kasser,

10

Non ho avuto molto successo con le risposte fornite, ma ho trovato un lavoro davvero semplice. Nello storyboard, puoi fare clic sull'elemento di navigazione di UIViewController e impostare il testo del pulsante Indietro. L'ho impostato su un unico '' spazio e mi ha dato il comportamento che stavo cercando.inserisci qui la descrizione dell'immagine


10

Questo ha funzionato per me in iOS10. Chiamalo da viewDidLoad del controller di visualizzazione.

self.navigationController?.navigationBar.topItem?.title = ""

6

La semplice soluzione a questo problema, che funziona su iOS7 e 6, è impostare la vista del titolo personalizzata in 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;
}

Quindi, in viewWillAppear: puoi chiamare in modo sicuro

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

Poiché la vista del titolo è una vista personalizzata, non verrà sovrascritta quando si torna indietro nello stack di navigazione.


Avevo solo bisogno dell'ultima parte del codice e non di UILabel vuota. Stavo chiamando [self.navigationItem.backBarButtonItem setTitle:@" "];in viewWillAppear ma non funzionava su viste presentate dopo aver respinto una vista modale.
Diziet,

6

In realtà puoi farlo con un solo trucco:

Sostituisci UINavigationBarclasse e aggiungi questa riga di codice:

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

Quindi inizializza il tuo UINavigationController con questa classe UINavigationBar personalizzata ... ecc.UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

Spero che questo ti aiuti


Questo ha funzionato per me. Anche se sembra che ci sia una leggera balbuzie nell'animazione push su iOS 7: il titolo sembra fare spazio al pulsante Indietro, quindi si centra poiché non ce n'è.
zekel,

Sì, prova a utilizzare titleView personalizzato anziché impostare direttamente navigationItem.title. Penso che dovrebbe risolvere il tuo problema.
rordulu,

questa soluzione è fantastica perché è globale per ogni barra di navigazione che ha la sottoclasse. Grazie
Yetispapa il

5

Sono stato in grado di mettere insieme qualcosa usando la risposta di DonnaLea. Ecco come appare la soluzione nella mia sottoclasse 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
    }
}

Il problema con la risposta originale è che rimuove il titolo dal controller quando si esegue il pop-up su di esso. Il tentativo di ripristinare il titolo in viewWillDisappear è troppo tardi nel processo di transizione; Fa sì che il titolo ritorni indietro invece di animarsi bene. Tuttavia willMoveToParentViewController si verifica prima e consente il comportamento corretto.

Avvertenza: l'ho provato solo con un normale push / pop UINavigationController. Potrebbero esserci ulteriori comportamenti imprevisti in altre situazioni.


4

Nel metodo preparForSegue: del tuo primo ViewController imposti il ​​titolo di quella vista su @ "", quindi quando viene premuta la vista successiva verrà visualizzato il titolo di ViewController precedente che sarà @ "".

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

L'unico problema è che quando si preme il pulsante Indietro la vista precedente non avrà un titolo, quindi è possibile aggiungerla di nuovo su viewWillAppear:

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

Non mi piace molto questa soluzione ma funziona e non ho trovato altro modo per farlo.



3

Nessuna delle risposte mi ha aiutato. Ma un trucco ha fatto: ho appena cancellato il titolo del controller di visualizzazione che ha premuto (dove sta andando il pulsante Indietro) poco prima di spingerlo.

Quindi, quando la vista precedente non ha un titolo, su iOS 7 il pulsante Indietro avrà solo una freccia, senza testo.

Nella viewWillAppearvisualizzazione push, ho riposizionato il titolo originale.


1
Hmm, questo trucco funziona. Comunque sembra che le parole lassù sfarfallino a volte. Non una soluzione molto buona, ma comunque buona. +1
Pan Ziyue,

3
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

Avevo lo stesso problema e l'ho fatto in questo modo.

--MODIFICARE--

questa è una soluzione quando si desidera veramente rimuovere il testo del titolo di tutto UIBarbuttonItem. Se si desidera rimuovere solo il titolo dell'elemento del pulsante della barra posteriore, non esiste una soluzione semplice e conveniente. Nel mio caso, dal momento che ho solo pochi UIBarButtonItems che devono mostrare il testo del titolo, ho appena cambiato il titolo specificoTestAttributes di quei pulsanti. Se vuoi essere più specifico usa il codice qui sotto, che cambierà solo i pulsanti della barra di navigazione:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

1
Questo funziona per me, tuttavia puoi vedere brevemente il testo quando rispondi.
Diziet,

3
@Diziet provare ad aggiungere lo stesso per lo Stato UIControlStateHighlightedcome pure
CoderPug

2
Funziona bene, ma anche questo "nasconde" tutti gli altri pulsanti, non solo il pulsante Indietro ... Qualche idea per risolverlo?
Urkman,

3

Questo sta usando la sottoclasse navigationController rimuove "Indietro".

Lo sto usando per rimuoverlo, permanentemente tramite l'app.

//.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

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];

1
Per favore, aggiungi una spiegazione alla tua risposta.
Alex,

1 crea lo stesso colore della barra di navigazione 2 rende le dimensioni del testo abbastanza piccole da non comprimere il titolo
Bill Xie,

Ho esaminato la tua risposta, dovresti sempre supportare la tua risposta.
Alex,

2

Nascondi pulsante Indietro Titolo della barra di navigazione

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

2

Ecco cosa mi sto facendo, che è più semplice rimuovere il titolo del pulsante Indietro

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}

2

Swift 3.1 È possibile farlo implementando il metodo delegato di UINavigationController. Nasconderà il titolo solo con il pulsante Indietro, otterremo comunque l'immagine della freccia indietro e la funzionalità predefinita.

func navigationController(_ navigationController: UINavigationController, 
  willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                    action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }

1

Puoi anche usare questo:

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;

[temporaryBarButtonItem release];

Questo funziona per me


1
case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

1

Soluzione perfetta a livello globale

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
}

la soluzione più pericolosa di tutte ... usa anche lo spazio come prima ... è appena diventato trasparente ...
Laszlo

Rimuove il testo da tutti gli UIBarButtonItems dell'app
Mikel Sanchez,

1

Creo una classe personalizzata per UINavigationControllere la applico a tutti i controller di navigazione nella mia app. All'interno di questa UINavigationControllerclasse personalizzata ho impostato il UINavigationBardelegato selfuna volta caricata la vista.

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

Quindi implemento il metodo delegato:

- (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;
}

In questo modo assegno semplicemente la mia classe personalizzata a tutti i miei controller di navigazione e cancella il titolo da tutti i pulsanti indietro. E solo per chiarezza, ho sempre impostato il titolo per tutti gli altri miei controller di visualizzazione all'interno in viewWillAppearmodo che il titolo sia sempre aggiornato appena prima della visualizzazione (nel caso in cui venga rimosso da trucchi come questo).


1

Basta inserire un singolo spazio per l'elemento di navigazione del pulsante Indietro funziona !!


1
Questo è più adatto come commento che come risposta.
Al Lelopath,

1

Se come me stai usando una vista personalizzata invece di UINavigationBare sei bloccato con il pulsante Indietro, allora devi fare un po 'di lavoro che sembra un po' confuso.

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

Sembra che se non viene presentato, non importa cosa proverà a mostrare un titolo, questo significa che viene mostrato e poi nascosto prima di essere disegnato e risolvere il problema.


1
extension UIViewController{
    func hideBackButton(){
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

1

Ho creato una categoria di configurazione zero molto semplice per nascondere tutti i titoli dei pulsanti indietro attraverso la tua app che puoi controllare qui . Questa domanda ha già accettato la risposta, ma per altri può essere utile.

MODIFICARE:

.h file

#import <UIKit/UIKit.h>

@interface UINavigationController (HideBackTitle)
extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);

@end

.m file

#import "UINavigationController+HideBackTitle.h"
#import <objc/runtime.h>


@implementation UINavigationController (HideBackTitle)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        PJSwizzleMethod([self class],
                    @selector(pushViewController:animated:),
                    @selector(pj_pushViewController:animated:));
    });
}

- (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *disappearingViewController =  self.viewControllers.lastObject;
    if (disappearingViewController) {
        disappearingViewController.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
    }
    if (!disappearingViewController) {
        return [self pj_pushViewController:viewController animated:animated];
    }
    return [self pj_pushViewController:viewController animated:animated];
}



@end

void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
{
    Method originalMethod = class_getInstanceMethod(cls, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);

    BOOL didAddMethod =
    class_addMethod(cls,
                originalSelector,
                method_getImplementation(swizzledMethod),
                method_getTypeEncoding(swizzledMethod));

    if (didAddMethod) {
        class_replaceMethod(cls,
                        swizzledSelector,
                        method_getImplementation(originalMethod),
                        method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.