it-swarm.com.de

Entfernen Sie den Text von der Zurück-Schaltfläche und behalten Sie das Symbol bei

Ich möchte den Text von der Zurück-Schaltfläche entfernen, aber ich möchte das Symbol beibehalten. Ich habe versucht 

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton

Dadurch werden jedoch der Text und das Symbol vollständig entfernt. 

53
lmiguelvargasf

Die Methode von @ rmd2 ist fast richtig, Sie sollten jedoch stattdessen die Navigationsleiste des Controllers auswählen, auf die die Zurück-Schaltfläche zeigt, und in das Feld Zurück-Schaltfläche " " eingeben.

 enter image description here

67
m8labs

Ich weiß, das hat bereits eine Antwort, aber Sie können es auch im Code tun (falls Sie mit Schreibfedern arbeiten)

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

Fügen Sie das Obige im ersten View-Controller hinzu. 

Beachten Sie, dass Sie dies für jeden View-Controller tun müssen, der den Push durchführt. Wenn Sie also 3 Ansichtscontroller haben und den Hintergrundtext von allen entfernen möchten, müssen Sie die Zeile in den Viewcontroller 1 und 2 hinzufügen. 

93
d9rad

Wenn Sie den Titel einer Zurück-Schaltfläche von einem Push-View-Controller entfernen möchten, sagen wir <Settings bis < in subSettingsViewController. Dann müssen Sie den backBarButtonItem - Titel in der viewWillDisappear ()-Methode von SettingsViewController festlegen.

Ziel c:

- (void)viewWillDisappear:(BOOL)animated
    [super viewWillDisappear:animated];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
}

Schnell:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
26
Muhammad Umair

Der Text der Zurück-Schaltfläche hängt vom Titel der Master-Ansicht ab.

Der Trick besteht darin, den Titel zu löschen, wenn die Masteransicht verschwindet, und ihn erneut festzulegen, wenn er erneut angezeigt wird:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    // needed to clear the text in the back navigation:
    self.navigationItem.title = " "
}

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
    self.navigationItem.title = "My Title"
}
21
Stefan

Wenn Sie den Pfeil zurücksetzen möchten, fügen Sie folgenden Code in die AppDelegate-Datei in der Methode didFinishLaunchingWithOptions ein.

Für Swift

let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)
19
Pradeep Bishnoi

In meinem Fall für benutzerdefiniertes Symbol und Titel hat dies den Trick (Swift 4)

    let imgBack = UIImage(named: "ic_back")

    navigationController?.navigationBar.backIndicatorImage = imgBack
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack

    navigationItem.leftItemsSupplementBackButton = true
    navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
19
Rafiqul Hasan

Ich habe dieses Problem durch Hinzufügen eines "" im StoryBoard-Titel des vorherigen ViewControllers behoben. Nur ein Leerzeichen, nicht leer; D

 enter image description here

13
rmd2

Endlich die perfekte Lösung gefunden.

Fügen Sie einfach ein transparentes Bild hinzu und fügen Sie folgenden Code in Ihre AppDelegate ein.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
11
Lalit Kumar

Für Swift 4+ Diese Zeilen in AppDelegate um didFinishLaunchingWithOptions setzen

let BarButtonItemAppearance = UIBarButtonItem.appearance()

BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)      
BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
10
BilalReffas

Nachdem ich viel gesucht hatte, fand ich die beste und einfachste Lösung. Dies wirkt sich auf alle in Swift 4.2 geschriebenen viewControllers aus.

extension UIViewController {
            open override func awakeFromNib() {
                navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }  
}
9
iOS Lifee

in Swift 4

self.navigationController?.navigationBar.topItem?.title = ""
7
Amalendu Kar

Wenn Sie über einen ViewControllerA verfügen und zum ViewControllerB navigieren möchten, sollten Sie im ViewControllerA das aktuelle navigationItem mit einem neuen UIBarButtonItem und dem Titel auf eine Zeichenfolge mit Leerzeichen vor Push an einen anderen View-Controller setzen:

Setzt den Titel auf eine Zeichenfolge mit einem Leerzeichen. Sie können weder nil noch "" (leere Zeichenfolge) festlegen, da der Standardwert nilist.

let backItem = UIBarButtonItem()
backItem.title = " "
navigationItem.backBarButtonItem = backItem
let controllerB = ViewControllerB()
navigationController?.pushViewController(controllerB, animated: true)
4
Bradley
let button: UIButton = UIButton (type: UIButtonType.Custom)
button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal)
button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside)
button.frame = CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem(customView: button)

self.navigationItem.leftBarButtonItem = barButton

func backButtonPressed(btn : UIButton) {

    // Your code
}
3
Hasya

So entfernen Sie von allen Viewcontrollern in einem Navigationscontrollerstack:

unterklasse UINavigationController und fügen Sie Folgendes hinzu:

override func show(_ vc: UIViewController, sender: Any?) {
    setEmptyBackButton(vc)
    super.show(vc, sender: sender)
}

override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    setEmptyBackButton(viewController)
    super.pushViewController(viewController, animated: animated)
}

func setEmptyBackButton(_ viewController: UIViewController) {
    viewController.navigationItem.backBarButtonItem =
        UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
2
Gaston Gonzalez

Fügen Sie diesen Code in jedes VC ein, das einen anderen drückt

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

Manchmal funktioniert es nicht, nur die Titelfarbe zu ändern, falls der Titel lang ist. Es könnte den Titel der Navigationsleiste nach links verschieben. Um dies zu verhindern, müssen Sie den Balkentastentitel zusätzlich horizontal verschieben, um ihn transparent zu machen:

let barButtonItemAppearance = UIBarButtonItem.appearance()
    barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
    barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
2
Max Niagolov

Xcode 10, Swift 4+

Eine ähnliche Antwort wie bei den anderen hier, aber es ist erwähnenswert, dass, wenn der Text immer noch nicht gelöscht wird, Sie die Leertaste und dann die Eingabetaste drücken müssen.

 enter image description here

1

Für mich war das der Trick:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    self.navigationItem.title = " "
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationItem.title = "my amazing title"
    navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}

Beachten Sie, dass wenn Sie nur den Titel ohne Änderung des backBarButtonItem setzen,angezeigt wird, um zu funktionieren. Wenn Sie versuchen, mit einer Geste zurück zu gehen und dann cancel zu bleiben und auf dem gedrückten Ansichts-Controller zu bleiben, wird der hintere Titel zurückgegeben.

Arbeiten in Swift 4

1
mrc

Wählen Sie die Navigationsleiste des Controllers FROM aus, auf die die Zurück-Schaltfläche zeigt, und geben Sie "" in das Feld "Zurück-Schaltfläche" ein.

wenn Sie beispielsweise einen A-Controller auf einen B-Controller schieben, geben Sie Leerzeichen in die Navigationsleiste des A-Controllers ein.

1
Tushar Raikwar

Dies wird Ihr Problem lösen:

    import UIKit

    extension UINavigationController{

    func customizeBackArrow(){
        let yourBackImage = UIImage(named: "icon_back_arrow")
        self.navigationBar.backIndicatorImage = yourBackImage
        self.navigationBar.tintColor = Common.offBlackColor
        self.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
        navigationItem.leftItemsSupplementBackButton = true
        self.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", 
           style: .plain, target: self, action: nil)

    }
}
0
mossman252

Einzelheiten

  • Xcode Version 10.2.1 (10E1001), Swift 5

Lösung

1. Erstelle eine benutzerdefinierte Klasse des UINavigationControllers

import UIKit

class NavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }
}

extension NavigationController: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if viewController.navigationItemBackButtonTextIsHidden {
            viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }
    }
}

2. UIViewController-Erweiterung hinzufügen

import UIKit

extension UIViewController {
    @objc var navigationItemBackButtonTextIsHidden: Bool { return false }
}

3. Aktualisieren Sie Ihre ViewController-Klasse

import UIKit

class ViewController: UIViewController {
    override var navigationItemBackButtonTextIsHidden: Bool { return true }
}

Vollständige Probe

import UIKit

// MARK: - ViewController

class ViewController: UIViewController {

    var screenCounter = 1

    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavigationItem()
    }

    override var navigationItemBackButtonTextIsHidden: Bool { return (screenCounter % 2) == 0 }
}

extension ViewController {

    private func setupNavigationItem() {
        navigationItem.title = "VC \(screenCounter)"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Push", style: .plain, target: self, action: #selector(pushBarButtonTouchedUpInside))
    }

    @objc func pushBarButtonTouchedUpInside(button: UIBarButtonItem) {
        guard let navigationController = navigationController else { return }
        let viewController = ViewController()
        viewController.screenCounter = screenCounter + 1
        viewController.view.backgroundColor = .white
        navigationController.pushViewController(viewController, animated: true)
    }
}

// MARK: - NavigationController

class NavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }
}

extension NavigationController: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if viewController.navigationItemBackButtonTextIsHidden {
            viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }
    }
}

// MARK: - UIViewController extension

extension UIViewController {
    @objc var navigationItemBackButtonTextIsHidden: Bool { return false }
}

Ergebnis

enter image description here

0

Ich habe ein paar Antworten ausprobiert und kann sie nicht in allen Fällen zum Laufen bringen. Dies ist also eine Problemumgehung, um den Titel der Navigationsleiste nicht zu beeinflussen, wenn er festgelegt ist.

    guard let items = viewController.navigationController?.navigationBar.items else { return }
    for item in items {
        if item.title == nil {
            item.title = ""
        }
    }
0
Rikard Platus

Für den Fall, dass wir den vorherigen View-Controller überhaupt nicht steuern können (d. H. Wenn wir in einem Framework arbeiten), können wir den Titel der Zurück-Schaltfläche wie folgt löschen:

// For iOS 10
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String()

// For iOS 11
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil

Sie navigieren zum letzten Element des Navigationsstapels und löschen dessen hinteren Titel. Stellen Sie sicher, dass das Original gespeichert wird, wenn unser View Controller angezeigt wird:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title
    // Delete title somewhere here...
}

und weisen Sie es dann erneut zu, um keinen Teil der App zu stören:

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle
    super.viewWillDisappear(animated)
}
0
Ángel Téllez

In Xcode 9.2 mit Swift funktionierte es so:

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(true)
   navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
0
Thiago Bueno

Ich habe diesen Code in der Funktion didFinishLaunchingWithOptions von Appdelegate verwendet.

if #available(iOS 11, *) {
            UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
            UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted)
        } else {
            UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0,
                                                                                           -60), for:UIBarMetrics.default)
        }
0
Varun Naharia