ลบข้อความออกจากปุ่มย้อนกลับโดยเก็บไอคอนไว้


96

ฉันต้องการลบข้อความออกจากปุ่มย้อนกลับ แต่ฉันต้องการเก็บไอคอนไว้ ฉันเหนื่อย

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

อย่างไรก็ตามสิ่งนี้จะลบข้อความและไอคอนออกทั้งหมด

คำตอบ:


99

วิธีการของ @ rmd2 เกือบจะถูกต้อง แต่คุณควรเลือกแถบนำทางของคอนโทรลเลอร์ที่ปุ่มย้อนกลับจะชี้ไปและพิมพ์" "ในช่องปุ่มย้อนกลับแทน

ป้อนคำอธิบายภาพที่นี่


1
วิธีที่แย่ที่สุดถ้าตัวควบคุมมุมมองไม่มีแถบนำทางฉันจะต้องเพิ่มเพื่อลบข้อความ
Daniel Beltrami

144

ฉันรู้ว่าสิ่งนี้มีคำตอบอยู่แล้ว แต่คุณสามารถทำได้ในรหัส (ในกรณีที่คุณกำลังทำงานกับปลายปากกา)

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

เพิ่มด้านบนในตัวควบคุมมุมมองแรก

โปรดทราบว่าคุณต้องทำสิ่งนี้สำหรับตัวควบคุมมุมมองแต่ละตัวที่กำลังพุช ดังนั้นหากคุณมีตัวควบคุมมุมมอง 3 ตัวและคุณต้องการลบข้อความด้านหลังออกจากตัวควบคุมทั้งหมดคุณจะต้องเพิ่มบรรทัดในตัวควบคุมมุมมอง 1 และ 2


5
นี่เป็นทางออกที่ดีที่สุดที่ฉันเคยเห็นมาทำให้ฉันไม่มีปัญหา
lostAtSeaJoshua

5
.Plain.plainก็เปลี่ยนไป ไม่มีทุน p.
กัล

เป๊ะ .. ! นั่นคือสิ่งที่ฉันต้องการ.
JD.

ทางออกที่ดีที่สุด ขอบคุณ.
Baran Emre

1
@ GastónAntonioMontesมันไม่ทำงานใน iOS13 แต่ก็นับบิตที่ใช้งานง่าย: ชื่อที่ว่างเปล่า backBarButtonItem ควรจะประกาศในการผลักดันควบคุมดูไม่ผลักดันหนึ่ง
มาร์ติน

51

หลังจากค้นหามากฉันพบวิธีแก้ปัญหาที่ดีที่สุดและเรียบง่ายสิ่งนี้จะส่งผลต่อ viewControllers ทั้งหมดที่เขียนใน Swift 4.2 และทำงานใน Swift 5

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

ยินดีต้อนรับ @ e.dimitrow
iOS Lifee

1
ทำงานได้อย่างมีเสน่ห์
Jerry Okafor

5
โปรดทราบว่าสิ่งนี้จะใช้ได้ก็ต่อเมื่อ ViewController ของคุณมีอยู่ใน Storyboard หรือ Nib ...
Nathaniel Blumer

1
ทางออกอัจฉริยะ!
WM

3
สิ่งนี้เคยใช้ได้ผลสำหรับฉัน แต่ไม่ได้ผลอีกต่อไป (มันยังใช้งานได้บนเครื่องจำลอง iOS 12 ไม่ใช่ iOS 13 ล่าสุด) ...
ทันย่า

37

ข้อความของปุ่มย้อนกลับขึ้นอยู่กับชื่อของมุมมองหลัก

เคล็ดลับคือการล้างหัวเรื่องหากมุมมองหลักหายไปและตั้งค่าอีกครั้งหากมีการแสดงอีกครั้ง:

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

    // 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"
}

33

หากคุณต้องการที่จะลบชื่อของปุ่มกลับจากการควบคุมดูผลักสมมติว่า<Settingsจะ<ใน subSettingsViewController แล้วคุณได้ตั้งbackBarButtonItemในชื่อของ SettingsViewController ) viewWillDisappear (วิธีการ

วัตถุประสงค์ -C:

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

รวดเร็ว:

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

1
.Plain.plainก็เปลี่ยนไป ไม่มีทุน p.
กัล

1
คำตอบต้องได้รับการอัพเดตสำหรับลักษณะการทำงานของ SearchController ตัวอย่างเช่นหากคุณใช้ resultsVC แยกต่างหากและแตะที่รายการที่ผลักดัน VC อื่นเมธอด viewWillDisappear จาก searchController เริ่มต้นจะไม่ถูกเรียกดังนั้นชื่อจึงยังคงอยู่ที่นั่น
H4Hugo

นี่ไม่ใช่แนวทางที่ดีหากคุณกำลังมองหาวิธีแก้ปัญหาสำหรับหน้าจอในแอปทั้งหมด - หากคุณเพิ่มรหัสนี้ลงใน "Base View Controller" บางตัว viewWillDisappear ของตัวควบคุมมุมมองแรกจะถูกเรียกตาม viewDidAppear ของตัวควบคุมมุมมองที่สอง (โดยปกติคุณจะตั้งชื่อเรื่อง) ... สิ่งนี้จะทำให้ชื่อยุ่งเหยิง วิธีที่ดีที่สุดคือการเขียนทับปุ่มย้อนกลับ
Mithra Singam

ขอบคุณโซลูชั่นที่สมบูรณ์แบบ
SURESH SANKE

28

หากคุณต้องการย้อนกลับให้ใส่รหัสต่อไปนี้ในไฟล์ AppDelegate ในเมธอด didFinishLaunchingWithOptions

สำหรับ Swift

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

2
ฉันชอบรูปแบบนี้เพราะคุณสามารถกำหนดรูปแบบของแอปของคุณเป็นมาตรฐานในไฟล์เดียวและเรียกใช้ครั้งเดียวจากตัวแทนแอป
Aaronium112

4
เป็นทางออกที่ดีและรวดเร็วจริงๆ แต่ ... อาจเป็นเรื่องยากหากคุณมีรายการปุ่มแถบอื่น ๆ ยกเว้นปุ่มด้านหลัง
:)

3
ข้อสังเกตประการหนึ่งหากคุณใช้เฉพาะแอตทริบิวต์ ".normal" คุณจะเห็นข้อความเมื่อคลิก เพิ่มบรรทัดเดียวกันสำหรับ ".selected", ".highlighted" และ ".disabled" เพื่อให้แน่ใจว่าคุณจะไม่เห็นข้อความที่สั่นไหว
Nick N

1
ฉันคิดว่านี่จะมีผลข้างเคียงปุ่มแถบอื่น ๆ นอกเหนือจากปุ่มย้อนกลับก็จะได้รับผลกระทบเช่นกันและจะมีสีข้อความที่ชัดเจน :(
dhin

24

ในกรณีของฉันสำหรับไอคอนที่กำหนดเองและชื่อสิ่งนี้ใช้เคล็ดลับ (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)

1
บรรทัดสุดท้ายในรหัสนั้นทำงานได้อย่างไม่มีที่ติสำหรับฉัน คำแนะนำอื่น ๆ ทั้งหมดไม่ได้ผลอาจเป็นเพราะตัวควบคุมมุมมองของฉันทั้งหมดควบคุมโดยตัวควบคุมการนำทาง ในกรณีใด navigationController? จำเป็นจริงๆ
Salx

คุณจะต้องมีสี่บรรทัดบนสุดหากคุณต้องการเพิ่มปุ่มย้อนกลับที่กำหนดเอง มิฉะนั้นบรรทัดสุดท้ายจะทำเคล็ดลับ
Rafiqul Hasan

14

ฉันแก้ไขปัญหานี้โดยการเพิ่ม "" ใน StoryBoard Title ของ ViewController ก่อนหน้านี้ แค่เว้นวรรคไม่ว่าง; D

ป้อนคำอธิบายภาพที่นี่


ฉันต้องการให้หน้าจอก่อนหน้ามีชื่อเรื่องดังนั้นฉันเดาว่าจะไม่ได้ผลสำหรับฉัน
lmiguelvargasf

2
ฉันเว้นว่างชื่อนั้นไว้ แต่ยังคงมีชื่อเรื่องอยู่ในชื่อปุ่มย้อนกลับ
Himali Shah

1
อย่าเว้นว่างช่องชื่อใส่ "" (ช่องว่าง) ในช่องปุ่มย้อนกลับ
Kiril S.

13

ในที่สุดก็พบทางออกที่สมบูรณ์แบบ

เพียงเพิ่มภาพโปร่งใสหนึ่งภาพและเพิ่มรหัสต่อไปนี้ใน AppDelegate ของคุณ

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

1
นี่คือคำตอบที่ดีที่สุดแน่นอน ก่อนหน้านี้ฉันใช้UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustmentแฮ็คคำตอบอื่น ๆ ส่วนใหญ่แนะนำ แต่ iPhone X เสียสำหรับตัวควบคุมมุมมองที่มีชื่อยาว โซลูชันนี้ทำงานได้อย่างไม่มีที่ติ
เนด

3
คำตอบที่ดีที่สุด ทำงานได้ดีกว่าสีข้อความโปร่งใส
William T.

1
ทางออกที่ดีที่สุดที่ฉันใช้ในช่วง 4 ปีที่ผ่านมา! คุณทำได้ครั้งเดียวในที่เดียวและสำหรับตัวควบคุมมุมมองทั้งหมด !!!
korgx9

1
เมื่อฉันลองใช้กับ iOS 12 ข้อความยังคงปรากฏอยู่ข้างๆรูปภาพ :(
Sean McMains

13

อย่างรวดเร็ว 4

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

ขอบคุณมันช่วยฉันได้ (Swift 4.0, Xcode 10.1, iOS 12.1.1) ขอบคุณ
infinity_coding7

3
แต่คุณจะสูญเสียตำแหน่งใน parent vc
Wei Lu

1
หากมีหัวเรื่องขนาดใหญ่ topItem จะมีขนาดใหญ่ ไม่ได้ผล
Saranjith

11

นี่ใช้งานได้สำหรับฉัน

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

1
ถูกต้องหนึ่งข้อ ใน ios 13 navigationItem.backBarButtonItem ไม่ทำงาน มันช่วยประหยัดเวลาของฉันได้หลายชั่วโมง ขอบคุณ
Manish

10

สำหรับSwift 4+ ให้ใส่บรรทัดเหล่านี้ไว้AppDelegateที่didFinishLaunchingWithOptions

let BarButtonItemAppearance = UIBarButtonItem.appearance()

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

เมื่อคุณตั้งค่าลักษณะที่ปรากฏในแอปให้มอบหมายสีพื้นหน้าที่ชัดเจนสำหรับทุก UIBarButtonItem ใช่หรือไม่ ดังนั้นหากฉันเพิ่ม UIBarButtonItem ด้วยข้อความฉันต้องเปลี่ยนสีพื้นหน้าสำหรับปุ่มนี้ด้วยตนเองหรือไม่?
kuzdu

1
นี่เป็นสิ่งที่ดี แต่เมื่อคุณกดปุ่มย้อนกลับมันยังคงแสดงข้อความ
William T.

ใช้งานได้ แต่ทำให้ปุ่มแถบอื่นหายไปใน iOS 11 คำตอบจาก Rafiqul Hasan ข้างต้นสามารถแก้ไขปัญหาได้
huync

6

หากคุณมี ViewControllerA และคุณต้องการนำทางไปยัง ViewControllerB ใน ViewControllerA คุณควรตั้งค่า navigationItem ปัจจุบันด้วย UIBarButtonItem ใหม่และชื่อเป็นสตริงที่มีพื้นที่ว่างก่อนที่จะผลักไปยังตัวควบคุมมุมมองอื่น:

ตั้งหัวเรื่องเป็นสตริงที่มีช่องว่างคุณไม่สามารถตั้งค่าศูนย์หรือ "" (สตริงว่าง) ได้เนื่องจากค่าเริ่มต้นคือศูนย์

let backItem = UIBarButtonItem()
backItem.title = " "
navigationItem.backBarButtonItem = backItem
let controllerB = ViewControllerB()
navigationController?.pushViewController(controllerB, animated: true)

ฉันได้รับพฤติกรรมที่ตลกมากโดยมีข้อความ "ย้อนกลับ" ปรากฏขึ้นอีกครั้งแม้ว่าจะตั้งชื่อเรื่องเป็น "" (และได้รับการตรวจสอบเช่นนี้) ในViewControllerB(แม้ว่าจะใช้งานได้ดีมาตลอดจนถึงตอนนี้ก็ตามด้วยกรณีพิเศษของฉัน) นี่คือ ทางออกเดียวที่ใช้ได้ผลสำหรับฉัน
10623169

6

ใส่รหัสนี้ในแต่ละ VC ซึ่งดันอีกอันหนึ่ง

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

3
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

หากต้องการลบออกจากวิวคอนโทรลเลอร์ทั้งหมดในสแต็กคอนโทรลเลอร์การนำทาง:

UINavigationController คลาสย่อยและเพิ่มสิ่งนี้:

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

บางครั้งก็ไม่สามารถเปลี่ยนเฉพาะสีของชื่อเรื่องในกรณีที่ชื่อยาว เนื่องจากอาจเลื่อนชื่อแถบนำทางไปทางซ้าย ดังนั้นเพื่อป้องกันไม่ให้คุณอาจต้องเปลี่ยนชื่อปุ่มแถบในแนวนอนนอกจากนี้เพื่อให้โปร่งใส:

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

2

รายละเอียด

  • Xcode เวอร์ชัน 10.2.1 (10E1001), Swift 5

วิธีการแก้

1. สร้างคลาสที่กำหนดเองของ UINavigationController

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

import UIKit

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

3. อัปเดตคลาส ViewController ของคุณ

import UIKit

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

ตัวอย่างฉบับเต็ม

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

ผลลัพธ์

ป้อนคำอธิบายภาพที่นี่


2

UINavigationControllerคุณสามารถลบข้อความจากปุ่มย้อนกลับใช้วิธีการของผู้ร่วมประชุม

class CustomNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

}

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

1

สำหรับฉันนี่เป็นเคล็ดลับ:

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)
}

ขอให้สังเกตว่าถ้าคุณตั้งค่าเพียงชื่อโดยไม่ต้องแก้ไข backBarButtonItem ก็จะปรากฏขึ้นในการทำงาน แต่ถ้าคุณพยายามย้อนกลับโดยใช้ท่าทางสัมผัสและยกเลิกและอยู่บนตัวควบคุมมุมมองแบบพุชมากกว่าชื่อด้านหลังจะกลับมา

ทำงานในSwift 4


คุณช่วยอธิบายได้ไหม
mrc

ฉันมีคอนโทรลเลอร์ที่แสดงข้อความย้อนกลับพร้อมปุ่มย้อนกลับเสมอ ดังนั้นรหัสด้านบนไม่ทำงานในกรณีของฉัน
Shahbaz Akram

1

คุณควรเลือกแถบนำทางของตัวควบคุมจากปุ่มย้อนกลับที่จะชี้ไปที่และพิมพ์ "" ในช่องปุ่มย้อนกลับ

เช่นหากคุณกำลังผลักตัวควบคุมไปยังตัวควบคุม B ให้ใส่ช่องว่างในแถบนำทางของตัวควบคุม


1

Xcode 10, Swift 4+

คำตอบที่คล้ายกันสำหรับคนอื่น ๆ ที่นี่ แต่ที่น่าสังเกตว่าหากยังไม่ล้างข้อความคุณต้องคลิก Space แล้วกด Enter

ป้อนคำอธิบายภาพที่นี่


1

อีกทางเลือกหนึ่งที่จะแทนที่ทั้งหมดViewControllersสำหรับฉันคือการที่จะขยายUINavigationControllerและการตั้งค่าของbackBarButtonItemtopViewController

Swift 5 บน Xcode 11.2.1:

extension UINavigationController {
    override open func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let backButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        self.topViewController?.navigationItem.backBarButtonItem = backButton
    }
}

1

วิธีที่ง่ายที่สุดในการดำเนินการนี้โดยใช้โปรแกรมคือการตั้งค่าbackBarButtonItemจากตัวควบคุมมุมมองหลัก (ตัวควบคุมที่เรียกการพุช)

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

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

ดูรายละเอียดเพิ่มเติมที่นี่https://sarunw.com/posts/how-to-remove-text-from-uinavigationbar-back-button/


0

ใน Xcode 9.2 กับ Swift มันทำงานในลักษณะนี้:

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

0

สำหรับกรณีที่เราไม่ได้ควบคุมทุกมุมมองก่อนหน้านี้เลย (เช่นถ้าเราทำงานในเฟรมเวิร์ก) เราสามารถลบชื่อของปุ่มย้อนกลับได้ดังนี้:

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

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

สิ่งที่ทำคือนำทางไปยังรายการสุดท้ายของสแต็กของการนำทางและลบชื่อด้านหลัง อย่าลืมบันทึกต้นฉบับเมื่อตัวควบคุมมุมมองของเราจะปรากฏขึ้น:

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

จากนั้นกำหนดใหม่เพื่อไม่รบกวนส่วนใดส่วนหนึ่งของแอป:

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle
    super.viewWillDisappear(animated)
}

0

วิธีนี้จะช่วยแก้ปัญหาของคุณ:

    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

ฉันได้ลองสองสามคำตอบแล้ว แต่ไม่สามารถใช้งานได้ในทุกกรณี ดังนั้นนี่จึงเป็นวิธีแก้ปัญหาที่จะไม่ส่งผลกระทบต่อชื่อของแถบนำทางหากตั้งค่าไว้

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

0

วิธีการเขียนโปรแกรมที่ง่ายโดยไม่มีผลข้างเคียงที่ไม่ต้องการคือการเริ่มต้นnavigationItem.backBarButtonItemด้วยรายการว่างในเมธอดwakeFromNibของตัวควบคุมต้นทาง (วิธีที่คุณกำลังนำทาง):

override func awakeFromNib() {
    super.awakeFromNib()
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

หมายเหตุ: หากคุณเริ่มต้นปุ่มย้อนกลับในภายหลังเช่นในเมธอดviewDidLoad ()มากกว่าที่คุณจะสูญเสียการปัดกลับฟังก์ชันการ (การปัดจากขอบด้านซ้ายไปทางขวาจะทำให้คุณย้อนกลับไปหนึ่งขั้นในสแต็กการนำทาง)

จากนั้นหากคุณต้องการข้อความปุ่มย้อนกลับที่แตกต่างกันสำหรับตัวควบคุมปลายทางที่แตกต่างกันและหากคุณใช้ segues คุณสามารถตั้งชื่อเรื่องในวิธีการจัดเตรียม (สำหรับ segue:, sender :)ดังนี้:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let item = navigationItem.backBarButtonItem {
        switch segue.identifier {
        case "SceneOne": item.title = "Back"; break
        case "SceneTwo": item.title = "Home"; break
        case "SceneThree": item.title = nil; break // Use this scene's title
        default: item.title = "" // No text
        }
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.