การเปลี่ยนชื่อการนำทางโดยทางโปรแกรม


188

ฉันมีแถบนำทางพร้อมชื่อ เมื่อฉันคลิกสองครั้งที่ข้อความเพื่อเปลี่ยนชื่อจริง ๆ แล้วมันบอกว่ามันเป็นรายการนำทางดังนั้นอาจเป็นเช่นนั้น

ฉันพยายามเปลี่ยนข้อความโดยใช้รหัสเช่น:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

นั่นไม่ใช่รหัสของฉันอย่างชัดเจนเพียงแค่แสดงว่ามันจะทำงานอย่างไร

ดังนั้นเมื่อใดก็ตามที่ฉันกดปุ่มฉันต้องการเปลี่ยนชื่อ

คำตอบ:


539

คุณเปลี่ยนชื่อโดยเปลี่ยนชื่อของมุมมองตัวควบคุมที่จะแสดง:

viewController.title = "some title"

โดยปกติสิ่งนี้จะกระทำในมุมมองที่โหลดบนตัวควบคุมมุมมอง

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

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

navigationBar.topItem.title = "some title"

1
ViewController.type ไม่มีชื่อสมาชิกชื่อ นั่นคือข้อผิดพลาดที่ฉันได้รับ
เพิ่มขึ้น

2
คุณไม่เรียกมันโดยตรงในชั้นเรียน คุณเรียกมันว่าบนอินสแตนซ์ของคลาสย่อยของ UIViewController
drewag

ใช่ViewControllerหมายถึงชั้นเรียนของตัวเอง คุณจำเป็นต้องอ้างถึงตัวอย่างViewControllerของ จากภายในวิธีการในชั้นเรียนของคุณเช่นคุณสามารถทำได้โดยใช้viewDidLoad selfหากคุณไม่ทราบความแตกต่างระหว่างคลาสและอินสแตนซ์ฉันขอแนะนำให้คุณเรียนรู้ว่ามันคืออะไร บทความนี้จะช่วย
drewag

ใช้งานได้อย่างมีเสน่ห์ใน Xcode เช่นกัน .. เพียงแค่การเปลี่ยนแปลงเล็กน้อย -> self.title = @ "some title";
บทคัดย่อ

self.title = "บางชื่อ" เหมาะกับฉัน ขอบคุณ ! ฉันได้ลองใช้ 'navigationController? .navigationItem.title = "บางชื่อ" ไม่แน่ใจจริงๆว่าทำไมมันไม่ทำงาน (ฉันมีรายการการนำทางที่นั่นซึ่งฉันวางไว้เพื่อแสดงชื่อนอกเหนือจากตัวควบคุมการนำทางแบบฝัง) ฉันยังคิดว่ามันควรจะใช้ได้ แต่ไม่รู้ว่าทำไม สแต็คล้นเพื่อช่วยเหลืออีกครั้ง!
Naishta


13

รหัสด้านล่างใช้ได้กับฉันด้วย Xcode 7:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}

10

ฉันพบสิ่งนี้เพื่อทำงาน:

navigationItem.title = "Title"

คุณจะวางตำแหน่งหัวเรื่องไว้ในตัวควบคุมมุมมองซึ่งเป็นลูกของ UINavigationController ได้อย่างไร ด้วยเหตุผลบางอย่างข้อความจะจัดชิดซ้าย var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy

5

และถ้าคุณจะพยายามสร้างNavigation Barด้วยตนเองรหัสนี้จะช่วยคุณ

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}

4

UIViewControllerโดยปกติแล้วปฏิบัติที่ดีที่สุดคือการตั้งชื่อในที่ โดยการทำเช่นนี้UINavigationItemตั้งยัง โดยทั่วไปจะดีกว่าการจัดสรรโดยทางโปรแกรมและการเริ่มต้นสิ่งUINavigationBarที่ไม่ได้เชื่อมโยงกับสิ่งใด

คุณพลาดประโยชน์และฟังก์ชั่นบางอย่างที่UINavigationBarได้รับการออกแบบมา นี่คือลิงค์ไปยังเอกสารที่อาจช่วยคุณได้ UINavigationItemจะกล่าวถึงคุณสมบัติที่แตกต่างกันคุณสามารถตั้งบนแถบที่เกิดขึ้นจริงและบน

เพียงจำไว้ว่า:

  1. คุณสูญเสียฟังก์ชันการทำงานของปุ่มย้อนกลับ
  2. การลากนิ้วในตัวจากด้านซ้ายเพื่อปัดกลับ

UINavigationControllerเป็นเพื่อนของคุณ



3

สวิฟท์ 3

ฉันสร้างเต้าเสียบสำหรับรายการแถบชื่อเรื่องการนำทางที่มาพร้อมกับแถบนำทาง (จาก Object Browser) ในกระดานเรื่องราว จากนั้นฉันก็ฟ้องเส้นด้านล่าง:

navigationBarTitleItem.title = "Hello Bar"

2

หากคุณต้องการเปลี่ยนชื่อจากตัวควบคุมมุมมองลูกของตัวควบคุมมุมมองหน้าเว็บที่ฝังอยู่ในตัวควบคุมการนำทางมันจะมีลักษณะเช่นนี้:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

1

หากคุณมีNavigationControllerฝังอยู่ภายในTabBarControllerดูด้านล่าง:

super.tabBarController?.title = "foobar"

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

คุณสามารถดีบักปัญหาเช่นนี้ด้วยสคริปต์ดีบักเกอร์ ลองใช้คำสั่งของ Chisel pvcเพื่อพิมพ์มุมมองที่มองเห็น / ซ่อนในลำดับชั้น


0

ในสวิฟต์ 4:

สวิฟท์ 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

ฉันหวังว่ามันจะช่วยด้วยความนับถือ!


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

@ Moritz คุณเป็นผู้ดูแลหรืออะไรแบบนั้น? ถ้าบอกว่าใช่ฉันจะลบมันถ้าไม่ฉันจะไม่ลบมัน
Radames E. Hernandez

1
คุณพูดอย่างนั้นจริงหรือ? เหนือฉันมี 4 คำตอบที่เท่ากันโดยสิ้นเชิงทำไมคุณถึงมากับฉันและบอกให้ฉันลบของฉัน? ฉันเป็นผู้ใช้ที่ไว้ใจได้ซึ่งสนับสนุนชุมชนฉันไม่ได้แค่ตอบคำถามซ้ำ ฉันแค่ต้องการอัปเดตคำถามนี้ด้วยเวอร์ชันที่รวดเร็วที่อัปเดต
Radames E. Hernandez

3
ไม่มีอะไรอัปเดตในคำตอบของคุณ นี่คือรหัสเดียวกันกับคำตอบที่ยอมรับส่วน "โดยปกติจะทำในมุมมองโหลดได้" ...
Eric Aya

0

ผมชอบใช้self.navigationItem.title = "Your Title Here"มากกว่าself.title = "Your Title Here"ที่จะให้ชื่อในแถบนำทางตั้งแต่แถบแท็บยังใช้self.titleในการปรับเปลี่ยนชื่อ คุณควรลองรหัสต่อไปนี้หนึ่งครั้ง

หมายเหตุ: จำเป็นต้องเรียก super lifecycle ก่อนที่คุณจะทำสิ่งใด

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

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}


0

สวิฟท์ 5.1

// ตั้งค่า NavigationBar Title โดยทางโปรแกรมและแบบไดนามิก

หมายเหตุ: แรกเพิ่ม NavigationControllerItem ไปของคุณViewControllerแล้วข้ามของพวกเขาและไฟล์เพียงแค่คัดลอกและวางในViewController.swiftviewDidLoad()

navigationItem.title = "Your Title Here"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.