iPhone: การตั้งค่าชื่อแถบนำทาง


87

สวัสดีทุกคน ฉันยังใหม่สำหรับการพัฒนา iPhone และฉันมีปัญหาเล็กน้อยในการหาวิธีเปลี่ยนชื่อแถบนำทาง สำหรับคำถามอื่นในไซต์นี้มีคนแนะนำให้ใช้:

viewController.title = @"title text";

แต่นั่นไม่ได้ผลสำหรับฉัน ... ฉันจำเป็นต้องเพิ่ม UINavigationController เพื่อทำสิ่งนี้ให้สำเร็จหรือไม่? หรืออาจเป็นเพียงเต้าเสียบจากคลาสย่อย UIViewController ของฉัน? ถ้ามันช่วยได้ฉันกำหนดแถบนำทางใน IB และฉันกำลังพยายามตั้งชื่อเรื่องในคลาสย่อย UIViewController ของฉัน นี่เป็นอีกหนึ่งสิ่งง่ายๆที่ทำให้ฉันปวดหัว การใส่ self.title = @ "title text"; ในviewDidLoadและinitWithNibNameไม่ทำงานเช่นกัน ใครรู้ว่าเกิดอะไรขึ้นและจะทำให้มันเกิดขึ้นได้อย่างไร?

ขอบคุณ!

คำตอบ:


154

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

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

หรือ

bar.topItem.title = @"title text";

8
ว้าว. ฉันใช้เวลาชั่วโมงสุดท้ายอย่างจริงจังในการเรียกดูฟอรัมและเอกสารในการพยายามหาสิ่งนี้และฉันก็มั่นใจว่ามันจะซับซ้อนกว่านี้ รหัสนี้ง่ายมากและฉันไม่ต้องกรอกอะไรใน IB อีก สมบูรณ์แบบ! Kenny ™คุณร็อค ถ้าฉันจำได้คุณยังตอบคำถาม NSDate ของฉันและตั้งค่าให้ฉันค้นคว้าพจนานุกรม คุณเป็นคนโปรดคนใหม่ของฉันในไซต์นี้ ขอบคุณมากสำหรับความช่วยเหลือของคุณ!
Arthur Skirvin

5
ความคิดเห็นของคุณทำให้ฉันยิ้มและสงสัยว่ามีใครเคยเป็นเพื่อนที่นี่ใน SO บ้างไหม? โดยปกติทุกคนที่นี่จะเป็นประโยชน์มาก แต่ดูเหมือนจะไม่แสดงอารมณ์ใด ๆ ของมนุษย์ (ยกเว้นผู้ถามแน่นอนเมื่อเขา / เธอหงุดหงิด)
maltalef

ดูคำตอบของ Sorin สำหรับโซลูชันที่เข้ากันได้กับสตอรีบอร์ด
devios1

ขอบคุณสำหรับคำตอบของคุณซึ่งช่วยประหยัดเวลาได้มาก :) @kennytm
jerry_sjtu

124

หากคุณทำทุกอย่างด้วยรหัสในviewDidLoadวิธีการที่UIViewControllerคุณควรเพิ่มเท่านั้นself.title = @"title text";

อะไรทำนองนี้:

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

คุณยังสามารถลอง self.navigationItem.title = @"title";

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


@ SorinA ขอบคุณ เป็นวิธีที่ดีกว่าในการตั้งชื่อแถบนำทาง
Tirth

33

มีปัญหาในการใช้งาน self.title = @"title";

หากคุณใช้แถบนำทางร่วมกับแถบแท็บบรรทัดด้านบนจะเปลี่ยนป้ายกำกับสำหรับรายการแถบแท็บด้วย เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้สิ่งที่ @testing แนะนำ

self.navigationItem.title = @"MyTitle";

13

หากคุณต้องการเปลี่ยนชื่อแถบนำทาง (ไม่ใช่ชื่อปุ่มย้อนกลับของแถบนำทาง!) รหัสนี้จะใช้งานได้

self.navigationController.topViewController.title = @"info";

9

หากคุณต้องการเปลี่ยนชื่อของ navBar ภายในตัวควบคุม tabBar ให้ดำเนินการดังนี้:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}

viewDidAppear ทำเคล็ดลับให้ฉันหลังจาก 2 ชั่วโมงพยายามหาวิธีนี้ ขอบคุณ :)
Tchelow

topItem.title อาจใช่หรือไม่ใช่ชื่อแถบนำทาง หากเป็นหน้าจอระดับบนสุดที่ไม่มีปุ่มย้อนกลับจะเป็นการตั้งชื่อเรื่อง แต่ถ้าคุณมีปุ่มย้อนกลับ topItem.title ก็คือชื่อปุ่มย้อนกลับ
user2962499


4

ฉันมีตัวควบคุมการนำทางที่รวมอยู่ใน TabbarController สิ่งนี้ได้ผล

self.navigationItem.title=@"title";

4

โดยค่าเริ่มต้นตัวควบคุมการนำทางจะแสดงชื่อของ 'topitem'

ดังนั้นในเมธอด viewdidload ของ appdelegate คุณสามารถทำได้ ฉันทดสอบแล้วและใช้งานได้

navController.navigationBar.topItem.title = @"Test";

2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

รหัสนี้ใช้งานได้


ยินดีต้อนรับสู่ SO และขอบคุณสำหรับโพสต์ การโพสต์ข้อมูลนี้เป็นความคิดเห็นจะดีกว่าโปรดดูวิธีการตอบสำหรับข้อมูลเพิ่มเติม
Serge Belov

2

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


1

ฉันเดาว่าคุณต้องการชื่อแบบไดนามิกนั่นคือเหตุผลที่คุณไม่ตั้งเป็น IB

และฉันคิดว่าวัตถุ viewController ของคุณเป็นวัตถุที่ระบุใน NIB หรือไม่

บางทีลองตั้งค่าเป็นค่าดัมมี่ใน IB แล้วดีบักเมธอดเพื่อดูว่าคอนโทรลเลอร์ตัวใดมีค่าดัมมี่ - สมมติว่ามันปรากฏเป็นชื่อ ...



1

สำหรับ Swift ทั้งหมดของคุณสิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน เป็นวิธีที่สั้นกว่าวิธีหนึ่งในการตั้งชื่อเรื่องให้สำเร็จเช่นกัน:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.