วิธีเปลี่ยนข้อความบนปุ่มย้อนกลับ


90

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

ฉันลองทำสิ่งต่อไปนี้แล้วซึ่งไม่ได้ผล:

self.navigationItem.leftBarButtonItem.title = @"Back";

ขอบคุณ.


3
โปรดทราบว่าปุ่มย้อนกลับมีชื่อด้วยเหตุผล การเปลี่ยนชื่อเป็น "ย้อนกลับ" จะเป็นการขโมยข้อมูลของผู้ใช้เกี่ยวกับสิ่งที่ปุ่มย้อนกลับไป
Simon

คำตอบ:


167

ลอง

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

ฉันพบว่าโดยดูที่backBarButtonItemเอกสารในเอกสารของ Apple สำหรับUINavigationItem


1
ขอโทษค่ะตอนนี้ไม่มีโอกาสทดสอบ แต่จะใช้รูปทรงด้านซ้ายของปุ่มย้อนกลับในตัวหรือไม่หรือจะคงรูปสี่เหลี่ยมเริ่มต้นของ UIBarButtonItem ไว้
Marco

ฉันไม่แน่ใจจริงๆ ฉันคิดว่ามันจะคงรูปร่างปุ่มย้อนกลับโดยอัตโนมัติเนื่องจากคุณกำลังตั้งค่าคุณสมบัติ backButton แต่คุณต้องทดสอบเพื่อหาคำตอบ ฉันก็อยากรู้เหมือนกัน
Marc W

2
ใช่มันได้ผล! ใช่เปลี่ยนชื่อเรื่องและใช่บันทึกรูปร่าง ขอบคุณสำหรับการช่วยเหลือ.
Ilya Suzdalnitski

1
หมายเหตุ: ปุ่มย้อนกลับจะถูกคงไว้สองครั้ง [1x จากการจัดสรร, 1x จากการเก็บรักษาคุณสมบัติ] อย่างไรก็ตามหากคุณไม่เปลี่ยนปุ่มย้อนกลับก็ไม่เป็นอันตรายอย่างมีประสิทธิภาพ
Kelvin

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

97

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

(bottom)  ControllerA -> ControllerB  (top)

... และคุณต้องการที่จะให้ชื่อสั้น ControllerA ในด้านหลังปุ่มที่ปรากฏเมื่อControllerB บนคุณใช้การเปลี่ยนแปลงคุณสมบัติการControllerA

ดังนั้นในบริบทของself.titleมันจึงไม่เหมือนกับตัวตั้งค่าปุ่มแถบซ้าย / ขวาอื่น ๆ


13
นี่เป็นรายละเอียดที่สำคัญมาก
บิล

4
wcochran ใช้งานได้กับสตอรีบอร์ดเพียงตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าปุ่มย้อนกลับของคอนโทรลเลอร์หลัก ดังนั้นหากคุณมีคอนโทรลเลอร์ A ที่ชี้ไปที่คอนโทรลเลอร์ B (ผ่านการต่อสตอรี่บอร์ด) มากกว่าที่จะปรับแต่งข้อความสำหรับปุ่มย้อนกลับในคอนโทรลเลอร์ B คุณต้องตั้งค่าคุณสมบัติ "ปุ่มย้อนกลับ" สำหรับคอนโทรลเลอร์ A ในตัวแก้ไขสตอรีบอร์ด
ขัดจังหวะ

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

+1 สำหรับรายละเอียดที่สำคัญ คำตอบข้างต้นจะไม่ได้ผลสำหรับคุณเว้นแต่คุณจะเข้าใจคำตอบนี้
baptzmoffire

คุณพูดถูกแป้นพิมพ์บน MacBook One ใหม่ค่อนข้างยากที่จะคุ้นเคย
Mason G. Zhwiti

48

คุณสามารถทำได้ในสตอรีบอร์ด ค้นหาตัวควบคุมมุมมองที่คุณต้องการย้อนกลับไป (อันที่มีชื่อเรื่องยาว) เลือกเป็นรายการการนำทางและเปิดตัวตรวจสอบคุณสมบัติ (Alt + Cmd + 4) แทรกชื่อปุ่มย้อนกลับที่กำหนดเอง

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


นี่คือสิ่งที่ฉันต้องการเนื่องจากฉันต้องการให้ปุ่มย้อนกลับทั้งหมดมีข้อความ "ย้อนกลับ" แทนชื่อการนำทางของคอนโทรลเลอร์ก่อนหน้านี้
Dave

8
โปรดทราบว่าข้อความปุ่มย้อนกลับถูกตั้งค่าในมุมมองที่ตัวควบคุมถัดไปถูกผลักออกมาไม่ใช่ตัวควบคุมมุมมองที่คุณแสดงอยู่ในปัจจุบัน
Darbio

นี่เป็นวิธีง่ายๆที่ดี แต่โปรดอย่าเปลี่ยนชื่อปุ่มย้อนกลับทั้งหมดเป็น "ย้อนกลับ" เพราะจะขัดต่อ HIG ของ Apple และเอาชนะส่วนหนึ่งของวัตถุประสงค์ของปุ่มย้อนกลับ :(
Samuel Goodwin

ทำงานได้ดี อย่าลืมบันทึกไฟล์ Storyboard ความพยายามครั้งแรกของฉันไม่ได้ผลเพราะฉันไม่ได้สังเกตว่า Storyboard ไม่ได้บันทึก! และใช่คุณเปลี่ยนปุ่ม BACK บนตัวควบคุมมุมมองที่คุณมาจาก!
EricWasTaken

ดีมาก แต่ถ้าฉันต้องการปล่อยลูกศรไว้โดยไม่มีข้อความใด ๆ ล่ะ? :)
Iurii Vasylenko

40

ขอบคุณมาร์โค ... ที่ช่วยฉัน ...

นี่คือสิ่งที่ฉันทำ

หากคุณใช้ tableView เพื่อนำทางไปยังมุมมองต่างๆ ... ให้ใส่รหัส:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

ในdidSelectRowAtIndexPathวิธีการของคุณ... ของ Controller ตัวแรก ... Controller A.

เมื่อคุณไปที่ Controller B ปุ่มจะมีชื่อเรื่อง "Back"


1
ขอบคุณที่รัก @ เบ็น นั่นคือสิ่งที่ฉันกำลังมองหา :)
Arslan

12

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

ในตัวควบคุมมุมมองหลัก (ตัวควบคุมมุมมองที่ปรากฏขึ้นเมื่อคุณแตะปุ่มย้อนกลับ) ให้ตั้งชื่อของตัวเองเป็นข้อความที่ต้องการบนปุ่มย้อนกลับ

ตัวอย่างเช่นสมมติว่าเรามีRootViewControllerคลาส SecondViewControllerเมื่อเราคลิกที่เซลล์ในมุมมองตารางของเราผลักดันตัวอย่างของ เราต้องการให้ปุ่มย้อนกลับของSecondViewControllerอินสแตนซ์อ่าน "หน้าแรก"

ใน viewDidLoadวิธีการRootViewController.m :

self.title = @"Home";

ในviewDidLoadวิธีการของ SecondViewController.m :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

หากคุณต้องการให้ปุ่มย้อนกลับอ่าน "ย้อนกลับ" ให้ตั้งชื่อของตัวควบคุมมุมมองหลักเป็น@"Back";


10

งานนี้ดีกว่าสำหรับฉัน ลอง :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

1
คำตอบที่ดีทำงานได้อย่างสมบูรณ์แบบ ควรทำเครื่องหมายว่ายกเว้น
มูฮัมหมัดริซวาน

9

หากคุณใช้สตอรี่บอร์ด:

  1. เปิด StoryBoard
  2. ในหน้าต่างเค้าร่างเอกสารให้ค้นหา ViewController ที่คุณต้องการกลับไป
  3. คลิกที่ Navigation Item ของ ViewController นั้น
  4. ใน Attributes explorer เปลี่ยนค่า Back Button เป็นไทล์ที่คุณกำหนดเอง

นั่นไงเพลิน ...


5

และใน MonoTouch จะทำงานต่อไปนี้ (ใน ViewDidLoad ของตัวควบคุมหลัก):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);


3

ในตัวควบคุมมุมมองหลักของคุณตั้งค่าปุ่มย้อนกลับเมื่อโหลดมุมมอง:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

สังเกตว่าเราไม่จำเป็นต้องรวม autoreleaseต่อท้ายด้วย iOS เวอร์ชันล่าสุด

หวังว่านี่จะช่วยได้!


1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

มันใช้ได้กับฉัน คุณสามารถแทนที่ "back" ด้วยอย่างอื่นได้


เมื่อตอบด้วยรหัสให้อธิบายเสมอว่าปัญหาของรหัสที่ให้มาคืออะไรและรหัสของคุณแก้ไขปัญหาอย่างไร
Lukas Knuth

1

อันนี้ใช้ได้ผลสำหรับฉันถ้าคุณไม่ต้องการมีชื่อ!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];


0

ในที่สุดฉันก็รู้ว่าทำไมคำตอบเหล่านี้ไม่ได้ผลสำหรับฉันในตอนแรก ฉันตั้งชื่อเรื่องในสตอรีบอร์ด เมื่อฉันตั้งชื่อเรื่องด้วยรหัส มันได้ผล!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

ในอนาคตคุณอาจต้องการสร้างโพสต์เช่นนี้เพื่อแสดงความคิดเห็นเกี่ยวกับคำตอบที่ไม่ได้ผลสำหรับคุณ
Keith Smiley

0

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

ดังนั้นฉันจึงเปลี่ยนชื่อในตัวควบคุมมุมมองการโทรเมื่อฉันกดตัวควบคุมมุมมองอื่นเช่น:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

และในฟังก์ชันการโทรกลับของผู้รับมอบสิทธิ์ (ซึ่งฉันเรียกใช้ใน viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}

0

หากคุณต้องการไม่เพียง แต่จะเปลี่ยนข้อความของปุ่มย้อนกลับและยังคงรูปทรงลูกศรซ้ายเดิม แต่ยังจะทำอะไรเมื่อผู้ใช้คลิกปุ่ม Back, ผมขอแนะนำให้คุณได้ดูรอบ ๆ ของฉัน " CustomNavigationController "


0

// คุณสามารถทำได้โดยตั้งชื่อเรื่องในตัวควบคุมมุมมองก่อนหน้าดังที่แสดงด้านล่าง

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}

0

สำหรับการเปลี่ยนชื่อปุ่มย้อนกลับโปรดดูรหัสด้านล่าง

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`

0

ใน Swift5 ไม่สามารถแก้ไข backBarButtom ได้ ดังนั้นเราต้องซ่อน backBarButtom ก่อนจากนั้นใช้ leftbarButtom ที่กำหนดเองเพื่อแทนที่ backBarButtom นี่คือวิธีแก้ปัญหาโดยละเอียด: https://stackoverflow.com/a/63868300/13939003


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