วิธีตั้งค่าข้อความปุ่มย้อนกลับใน Swift


207

คุณจะลบข้อความปุ่มย้อนกลับได้อย่างไร

ปุ่มย้อนกลับปัจจุบัน:

<ย้อนกลับ

ปุ่มย้อนกลับที่ต้องการ:

<AnythingElse

สิ่งเหล่านี้ไม่ได้ผล:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

คำตอบ:


604

ปุ่มย้อนกลับเป็นของตัวควบคุมมุมมองก่อนหน้านี้ไม่ใช่ปุ่มที่แสดงอยู่บนหน้าจอในปัจจุบัน
ในการปรับเปลี่ยนปุ่มย้อนกลับคุณควรอัพเดตก่อนกดบนตัวควบคุมมุมมองที่เริ่มต้น segue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

สวิฟท์ 3, 4 และ 5:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

หรือ

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)


9
ขอบคุณมากคุณไม่รู้หรอกว่าฉันใช้เวลาไปกี่ชั่วโมงกับรายละเอียดเล็ก ๆ น้อย ๆ (ผู้ควบคุมก่อนหน้านี้)
Ricardo

3
ถ้าฉันสามารถโหวตได้มากกว่าหนึ่งล้านครั้งฉันก็จะทำ ไม่สามารถบอกคุณได้ว่าผมใช้เวลานานสงสัยว่าทำไมมันไม่ได้ทำงาน (ก่อนหน้านี้บนตัวควบคุมปลายทาง)
ดีแลนไอร์แลนด์

13
"ปุ่มย้อนกลับเป็นของคอนโทรลเลอร์มุมมองก่อนหน้า" ซึ่งเป็นคำตอบที่มีค่าที่สุดที่ฉันได้พบเกี่ยวกับหัวข้อนี้! ขอบคุณ!
vhristoskov

1
การตั้งค่าการtitleเปลี่ยนแปลงชื่อไม่ใช่แค่ปุ่มย้อนกลับ
Yariv Nissim

4
ฉันเพิ่ม self.navigationController! .navigationBar.topItem! .backBarButtonItem = backItem แทน navigationItem.backBarButtonItem = backItem และทำงานได้ดีบน Swift 3 ขอบคุณ
อินทราอดัม

125

คุณสามารถทำได้จากเครื่องมือสร้างอินเตอร์เฟสดังนี้:

คลิกที่รายการการนำทางของตัวควบคุมมุมมองก่อนหน้า

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

จากตัวตรวจสอบคุณสมบัติตั้งค่าข้อความปุ่มย้อนกลับเป็นสิ่งที่คุณต้องการ แค่นั้นแหละ!!

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


1
วิธีที่ดีที่สุดในการกำหนด 'ศูนย์' คืออะไร?
kennydust

@kennydust คุณหมายถึงชื่อเปล่าหรือไม่
Ajinkya Patil

8
@ kennydust ใช่ในปุ่มย้อนกลับเพิ่มช่องว่างและกด Enter
Ajinkya Patil

ดีและง่าย แต่มันแปลเป็นภาษาท้องถิ่นหรือไม่
Gruntcakes

2
@AjinkyaPatil ฉันลองแล้ว แต่ปุ่ม Back ไม่แสดงขึ้นมา เหตุผลใดที่อาจเป็นเช่นนี้?
user805981

48

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

self.navigationItem.title = ""

อีกวิธีคือใส่

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

ในวิธี viewWillAppear ของคอนโทรลเลอร์ปัจจุบัน อันนี้จะทำให้เกิดปัญหาอื่น ๆ ถ้านำทางซ้อนกันเกินไป


5
self.navigationItem.title = "" ควรเป็นคำตอบที่ดีที่สุด!
rilar

ฉันเห็นด้วยกับสิ่งนี้เป็นคำตอบที่ดีที่สุดเพราะคำตอบทั้งหมดข้างต้นจำเป็นต้องเพิ่มฟังก์ชั่นเป้าหมายในรายการการนำทางดังนั้นพวกเขาจึงไม่เพียง แต่เปลี่ยนข้อความ แต่พวกเขาเพิ่มฟังก์ชั่นป๊อปที่กำหนดเองด้วยเช่นกัน
IsPha

มันใช้งานได้ดีprepareForSegueซึ่งก็คือ ทำความสะอาดเล็กน้อยเพราะคุณไม่ได้เปลี่ยน viewController ใหม่หลังจากโหลดแล้ว
เอเดรียน

ให้ความสนใจ!!! ใส่ self.title = "..... " ก่อนเรียกไปที่ self.navigationItem.title = ""
Bary Levy

45

คุณสามารถใส่รหัส 3 บรรทัดนี้ในViewControllerคุณต้องการเปลี่ยนชื่อปุ่มย้อนกลับ

override func viewDidLoad() {}ในของคุณ

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
วิธีนี้ดูเหมือนจะถูกต้องมากขึ้นเมื่อคุณใส่ตรรกะใน VC ที่มาถึงไม่ใช่ VC ที่คุณกำลังออก อาคา: อ่านดีขึ้น
eonist

37

หากคุณกำลังใช้ไฟล์ xib สำหรับตัวควบคุมมุมมองให้ทำเช่นนี้ในคลาสตัวควบคุมมุมมองของคุณ

class AboutUsViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    edgesForExtendedLayout = []
    setUpNavBar()
}

func setUpNavBar(){
    //For title in navigation bar
    self.navigationController?.view.backgroundColor = UIColor.white
    self.navigationController?.view.tintColor = UIColor.orange
    self.navigationItem.title = "About Us"

    //For back button in navigation bar
    let backButton = UIBarButtonItem()
    backButton.title = "Back"
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}

}

ผลลัพธ์จะเป็น:

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


29

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

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

ผลลัพธ์จะเป็น:

ก่อน

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

หลังจาก

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


3
ในกรณีของฉันมันจะทำงานเฉพาะเมื่อคุณวางโค้ดนี้ในวิธีการ viewDidAppear และไม่ใช่ viewDidLoad หนึ่ง
apinho

2
ใช้navigationController.navigationBar.topItem?.title = ""แทนเพื่อหลีกเลี่ยงการวางไว้ในviewDidAppear
José

ดูเหมือนว่าเป็นวิธีที่น่าพอใจที่สุดและหลีกเลี่ยงแฟลชเนื่องจากชื่อปุ่มย้อนกลับเปลี่ยนเป็น "" โดยใช้ self.navigationItem.title = "" ในตัวควบคุมการโทร (อุปกรณ์ที่ช้ากว่า) นอกจากนี้ยังมีสถานการณ์อื่น ๆ ที่ self.navigationItem.title = "" ถูกเพิกเฉยอย่างสมบูรณ์ในช่วงการเปลี่ยนผ่านอย่างรวดเร็วไปยังตัวควบคุมมุมมองผ่านทางแท็บตัวควบคุมแท็บโดยทางโปรแกรม
FlimFlam Vir

22

ปุ่มย้อนกลับเป็นของตัวควบคุมมุมมองก่อนหน้านี้ไม่ใช่ปุ่มที่แสดงอยู่บนหน้าจอในปัจจุบัน หากต้องการแก้ไขปุ่มย้อนกลับคุณควรอัปเดตก่อนผลักดันเพิ่ม viewdidload:

สวิฟท์ 4:

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

12

คุณสามารถแก้ไข NavigationItem ในกระดานเรื่องราวได้

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

ในปุ่มย้อนกลับเพิ่มช่องว่างและกด Enter

หมายเหตุ: ทำสิ่งนี้ใน VC ก่อนหน้า


8

Swift 4 - กำหนดค่าปุ่มย้อนกลับก่อนที่จะผลักดันตัวควบคุมมุมมองใด ๆ

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

สิ่งนี้น่าจะใช้ได้:

override func viewDidLoad() {
    super.viewDidLoad()

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
    self.navigationItem.backBarButtonItem = button

}

func goBack()
{
    self.navigationController?.popViewControllerAnimated(true)
}

แม้ว่าจะไม่แนะนำเนื่องจากสิ่งนี้จะแทนที่ backButton จริง ๆ และมันยังลบลูกศรย้อนกลับและรูปแบบการปัดนิ้ว


10
ไม่ใช่วิธีที่ถูกต้องที่จะทำคุณแค่เปลี่ยนปุ่มย้อนกลับ
Yariv Nissim

ดีกว่าที่จะทำจากตัวสร้างส่วนติดต่อ
Rutger Huijsmans

7

สวิฟท์ 4.2

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

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

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

 self.title = "Navigation Bar Title"

6

มีสองวิธี

1. ในก่อนหน้า ViewController.viewDidLoad ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2.In the currentViewController.viewDidAppear ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

เหตุผล: backButtonมาจากnavigationBar.backItem.backBarButtonItemดังนั้นวิธีแรกคือ obvious.In currentViewController.viewDidLoad () เราไม่ได้รับการอ้างอิงของbackItemเพราะใน viewDidAppear () ที่navigationBarผลักดันnavigationViewในตัวstackดังนั้นเราสามารถทำให้การเปลี่ยนแปลงbackItemใน currentViewController viewDidAppear ()

สำหรับรายละเอียดเพิ่มเติมคุณสามารถดูเอกสาร: UINavigationBar


3

ในviewDidLoadวิธีการของตัวควบคุมการนำเสนอเพิ่ม:

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

2

แม้ว่าคำตอบเหล่านี้จะแก้ไขปัญหาได้ แต่อาจมีประโยชน์บ้าง

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

สวิฟต์ 4

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

สิ่งที่ดีที่สุดที่ต้องทำคือตั้งชื่อของ VC ปัจจุบันใน viewDidLoad และจะตั้งชื่อปุ่มย้อนกลับอย่างถูกต้องโดยอัตโนมัติใน VC ถัดไป บรรทัดนี้ใช้ได้สำหรับฉัน

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

2

ใช้งานได้กับSwift 5 :

self.navigationItem.backBarButtonItem?.title = ""

โปรดทราบว่ามันจะมีประสิทธิภาพสำหรับคอนโทรลเลอร์มุมมองที่ถูกผลักถัดไปไม่ใช่ตัวควบคุมปัจจุบันบนจอแสดงผลนั่นเป็นสาเหตุที่ทำให้เกิดความสับสนมาก!

ตรวจสอบกระดานเรื่องราวและเลือกรายการการนำทางของตัวควบคุมมุมมองก่อนหน้าจากนั้นพิมพ์บางอย่างในปุ่มย้อนกลับ (ผู้ตรวจสอบ)


1

ลองนี้ ... มันจะทำงาน ....

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

รหัสด้านบนจะซ่อนข้อความและแสดงเฉพาะลูกศรย้อนกลับบนแถบนำทาง



0
override func viewWillAppear(_ animated: Bool) {

    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}

func goToNoteEditorViewController(){
   // action what you want
}

หวังว่ามันจะช่วย !! #swift 3


0

หากคุณกำลังผลักดันตัวควบคุมมุมมองจากหน้าตัวควบคุมมุมมองหน้าคุณไม่สามารถอัปเดตชื่อปุ่มย้อนกลับของตัวควบคุมทิศทาง เพื่อแก้ปัญหานี้ให้สร้างผู้รับมอบสิทธิ์กลับไปยังตัวควบคุมมุมมองพาเรนต์ (คุณอาจสามารถสำรวจลำดับชั้นของตัวควบคุมมุมมองกลับไปที่พาเรนต์)

นอกจากนี้ปุ่มย้อนกลับมีการ จำกัด จำนวนอักขระ หากคุณมีอักขระเกินขีด จำกัด ระบบจะใช้ค่าเริ่มต้นเป็น "ย้อนกลับ" มันจะไม่ถูกตัดทอนสำหรับคุณ ตัวอย่างเช่น:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

0

สวิฟต์ 4

ในกรณีของฉันการแก้ปัญหาคือการล้างรายการการนำทางของ Master View Controller ก่อนที่จะย้ายไปที่ Child View Controller และตั้งค่าอีกครั้งหากมีการแสดงอีกครั้ง

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

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

และนี่คือวิธีที่ฉันกด UIViewController และล้างรายการปุ่มแถบด้านหลังในตัวควบคุมลูก:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)


0

GOTCHA: หากคุณมีปัญหากับคำแนะนำที่ติดดาวโปรดตรวจสอบให้แน่ใจว่าคุณกำลังลงทะเบียนUITableViewCellเข้าใช้viewDidLoad()ไม่ใช่จากinit()


-1

ตรวจสอบวิธีแก้ไขปัญหาและทำงานในSwift 5

ด้านล่างฉันใส่วิธีแก้ปัญหาสำหรับกรณีที่แตกต่างกัน:

1. ลบข้อความออกจากปุ่มย้อนกลับ

ทางออกที่ดีที่สุดในการลบข้อความออกจากปุ่มย้อนกลับคือการเพิ่มใน viewDidLoad ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. ตั้งค่าข้อความของตัวเองที่ปุ่มย้อนกลับ

ในกรณีที่คุณต้องการตั้งชื่อของคุณเองให้ทำโดยการตั้งชื่อ backButton:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3. ปุ่มย้อนกลับว่างเปล่าใน VC ทั้งหมด

หากคุณต้องการสร้างสไตล์ร่วมกันในแอปทั้งหมด - เพียงแค่มีลูกศรย้อนกลับโดยไม่มีข้อความให้สร้าง VC พื้นฐานสำหรับตัวควบคุมมุมมองของคุณทั้งหมด:

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

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

โซลูชันที่นำเสนอข้างต้นให้คุณปรับแต่งปุ่มย้อนกลับในอนาคตหากคุณต้องการยกเว้นในภายหลังโดยการเพิ่มตัวแปรเพิ่มเติมและแทนที่มันใน ViewController เฉพาะ f.ex:

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

รวดเร็ว 4

มีวิธีหนึ่งในการเปลี่ยนข้อความใน backButton โดยทางโปรแกรมจาก viewController ปัจจุบัน:

navigationController?.navigationBar.items![0].title = "some new text"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.