मैं नेविगेशन बार पर "बैक" बटन का शीर्षक कैसे बदल सकता हूं


224

वर्तमान में बाएं बार बटन डिफ़ॉल्ट मान उस दृश्य का शीर्षक है, जिसने वर्तमान को लोड किया है, दूसरे शब्दों में बटन दबाए जाने पर दिखाया जाने वाला दृश्य (बैक बटन)।

मैं बटन पर दिखाए गए पाठ को कुछ और में बदलना चाहता हूं।

मैंने कंट्रोलर के व्यूडीडलॉड पद्धति में कोड की निम्नलिखित पंक्ति डालने की कोशिश की, लेकिन यह काम नहीं करता है।

self.navigationItem.leftBarButtonItem.title = @"Log Out";

मुझे क्या करना चाहिए?

धन्यवाद।

जवाबों:


345

इसे उस विधि में रखा जाना चाहिए जो ViewController को "NewTitle" शीर्षक से बुलाती है। धक्का या popViewController बयान से ठीक पहले।

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

47
चाइल्ड व्यू कंट्रोलर में, चाइल्ड व्यू कंट्रोलर से यह कॉल करने पर काम नहीं होगा। आपको इसे पेरेंट व्यू कंट्रोलर से बुलाना होगा, जबकि चाइल्ड व्यू कंट्रोलर के भीतर।
एलेक्स रेनॉल्ड्स

2
मेरे तीसरे स्तर के दृश्य नियंत्रक (दूसरा धक्का) के लिए बैक बटन को बदलने के लिए मुझे उपरोक्त उत्तर के बजाय निम्नलिखित लाइन का उपयोग करना था: [[self.parentViewController navigationItem] setBackBarButtonItem: newBack.utton]; क्या मुझसे कुछ गलत हो रही है?
जॉन्ब

4
जॉर्डन का कहना है कि उन्होंने "[जोड़ा] थोड़ा और स्पष्टता से कहा कि कोड कहां रखा जाए।" यहां और भी स्पष्टता है: इसे दूसरे (उर्फ बच्चे) नियंत्रक को पुश करने के लिए कॉल करने से तुरंत पहले (उर्फ माता-पिता) नियंत्रक में डालें।
बेनेवोलियो

1
आप एक कस्टम BaseViewController बना सकते हैं और करने के लिए में रख सकते हैं-viewDidLoad:
ArtFeel

2
पुश या पॉप से ​​पहले आपको यह करने की आवश्यकता नहीं है। आप इसे viewDidLoad या loadView या जहाँ भी आप इस दृश्य के लिए शीर्षक और अन्य गुण सेट करते हैं, में कर सकते हैं। नीचे दिए गए विक्टर बोगडान का जवाब स्पष्ट है, IMHO।
जो स्ट्रेट

98

ChildVC में यह मेरे लिए काम किया ...

self.navigationController.navigationBar.topItem.title = @"Back";

स्विफ्ट में भी काम करता है!

self.navigationController!.navigationBar.topItem!.title = "Back"

4
Xcode 5.0.2 में iOS 7 पर परीक्षण और सत्यापित किया गया। जब आप वापस उस पर जाते हैं तो यह पिछले स्क्रीन के शीर्षक को बैक टू में बदल देगा।
एलेक्स ज़ावाटोन

सरलतम उपाय। दोनों iOS 6 और 7 पर काम करता है। आधार UIViewController में रखें और किया। धक्का समाधान में आईबी समाधान या सेटिंग से बहुत बेहतर है।
एरिक चेन

46
यह पिछले दृश्य नियंत्रक का शीर्षक बदलता है, इस समाधान में समस्या है
निकिता

2
@ नीकिता, आप टाइल को देखने में वापस सेट कर सकते हैंडिलस्पेयर
दान ब्यूलियू

81

यहाँ backBarButtonItem के लिए प्रलेखन है :

"जब यह नेविगेशन आइटम स्टैक में शीर्ष आइटम से तुरंत नीचे है, तो नेविगेशन कंट्रोलर इस नेविगेशन आइटम के नेविगेशन बार के लिए बैक बटन प्राप्त करता है। [...] यदि आप बैक बटन के लिए एक कस्टम छवि या शीर्षक निर्दिष्ट करना चाहते हैं। , आप इस संपत्ति के बदले एक कस्टम बार बटन आइटम (अपने कस्टम शीर्षक या छवि के साथ) असाइन कर सकते हैं। "

देखें नियंत्रक एक ( "जनक" दृश्य नियंत्रक):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

जब कोई अन्य दृश्य नियंत्रक B नेविगेशन स्टैक के शीर्ष पर होता है, और A इसके ठीक नीचे होता है, तो B के बैक बटन का शीर्षक "Short" होगा


4
मुश्किल हिस्सा है कि आपको PARENT व्यू कंट्रोलर में बैक बटन सेट करना है न कि चाइल्ड व्यू। एक घंटा बर्बाद कर यह पता लगा लिया।
मर्कुरियल

56

Xcode 4.5 में स्टोरीबोर्ड का उपयोग करके, अब तक का सबसे आसान समाधान मैंने पाया है जब बैक बटन के मूल्य को गतिशील रूप से बदलना नहीं है, तो दृश्य नियंत्रक के नेविगेशन आइटम से जुड़े "बैक बटन" फ़ील्ड का उपयोग करना है, जिसके लिए आप कुछ और कहने के लिए "वापस" बटन चाहते हैं।

नीचे दिए गए स्क्रीनशॉट में उदाहरण के लिए, मैं व्यू कंट्रोलर के लिए बैक बटन चाहता हूं जिसे मैं बैक बटन के शीर्षक के रूप में "बैक" करने के लिए धक्का देता हूं।

यहां छवि विवरण दर्ज करें

बेशक, यह काम नहीं करेगा यदि आपको हर बार कुछ अलग कहने के लिए बैक बटन की आवश्यकता हो ... इसके लिए यहां अन्य समाधान मौजूद हैं।


मूल प्रश्न स्टोरीबोर्ड का उपयोग करने के बारे में कुछ नहीं कहा, इसलिए यह निश्चित रूप से अच्छा है कि यह स्वीकृत उत्तर नहीं है, लेकिन स्टोरीबोर्ड-आधारित विकास के लिए एक समाधान सही है।
विलापोसु

42

मुझे पता है, सवाल बहुत पुराना है, लेकिन मुझे एक अच्छा समाधान मिला।

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

चाइल्डव्यू से काम करता है! IOS 7 के साथ परीक्षण किया गया।


यह केवल एक स्तर पर काम करता है। यह मेरे लिए एक बच्चे के बच्चे के लिए काम नहीं कर रहा है। iOS 8.
narco 10

26

हो सकता है कि मैं सरलीकृत हो रहा हूं, लेकिन Apple के दस्तावेज़ीकरण से यह शब्द आया है:

यदि कस्टम बार बटन आइटम दृश्य नियंत्रकों में से किसी के द्वारा निर्दिष्ट नहीं किया जाता है, तो एक डिफ़ॉल्ट बैक बटन का उपयोग किया जाता है और इसका शीर्षक पिछले दृश्य नियंत्रक की शीर्षक संपत्ति के मूल्य पर सेट होता है - अर्थात, व्यू कंट्रोलर एक स्तर नीचे ढेर।

सही ऊपर चिह्नित समाधान मूल नियंत्रक से एक डिफ़ॉल्ट बटन आइटम सेट करता है। यह सही उत्तर है, लेकिन मैं self.titleनेविगेशन कंट्रोलर स्टैक पर नए नियंत्रक को धक्का देने से पहले UIViewController की संपत्ति को बदलकर समस्या को हल कर रहा हूं ।

यह स्वचालित रूप से अगले कंट्रोलर पर बैक बटन के शीर्षक को अपडेट करता है, और जब तक आप self.titleइसे वापस सेट करते हैं, तब तक यह होना चाहिए कि viewWillAppearमैं इस पद्धति को बहुत अधिक समस्याएं पैदा नहीं कर सकता।


19

यह मेरे लिए बेहतर काम है। प्रयत्न :

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

19

स्विफ्ट / iOS8 में, निम्नलिखित ने मेरे लिए काम किया:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

फेलिप के जवाब से पोर्ट किया गया।


स्विफ्ट 1.1 सिंटेक्स हैself.navigationController?.navigationBar.topItem?.backBarButtonItem
वॉरेन बर्टन

3
शैली UIBarButtonItemStyle.Plain
माइक्रो

2
इसके लिए धन्यवाद। यह वास्तव में दयनीय एपीआई क्या है। और सामान्य रूप से UIKit का प्रतिनिधि। IOS में नेविगेशन बार और स्टेटस बार्स के बीच, यह एक आश्चर्य की बात है कि हम अभी भी इस धमाकेदार प्लेटफॉर्म के लिए विकसित हैं। स्टैक ओवरफ्लो और इसके योगदानकर्ताओं के लिए बेबी जीसस को धन्यवाद दें!
Womble

@Wobmle: आपको कुछ महीनों के लिए एंड्रॉइड के लिए विकास करना चाहिए;)
fl034

17

ठीक है, यहाँ रास्ता है। यदि आपके पास एक दृश्य नियंत्रक "पहला" है और आप एक बटन या आदि को धक्का देकर एक अन्य दृश्य नियंत्रक "दूसरा" नेविगेट करते हैं, तो आपको कुछ काम करने की आवश्यकता है। पहले आपको इस तरह "नियंत्रक" व्यूडीडलॉड विधि में "दूसरा" बारबटनटन बनाने की आवश्यकता है;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

ऐसा करने के बाद, आपको "btnBack" एक्शन के लिए कोड को लिखने की जरूरत है। इस तरह से .m फ़ाइल में;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

बस इतना ही।


2
leftBarButtonItemकी उपस्थिति नहीं होती है backBarButtonItem, यदि यह एप्लिकेशन डिज़ाइन में महत्वपूर्ण है।
एलेक्स रेनॉल्ड्स

1
पोस्ट किए गए समाधानों में से (बहुत बहुत धन्यवाद) यह काम करने लगता है, जैसा कि एलेक्स ने ऊपर कहा है, बाएं बार बटन बैक बार आइटम की तरह नहीं दिखता है। मैं इसे एक बार बार आइटम की तरह कैसे बना सकता हूं ???
डेल

17

मेरे पास वास्तव में लंबे शीर्षक के साथ एक अभिभावक दृश्य नियंत्रक था। इसके परिणामस्वरूप चाइल्ड व्यू कंट्रोलर के शीर्षक में बैक बटन टेक्स्ट ब्लीडिंग हुई।

विभिन्न समाधानों के एक समूह की कोशिश करने के बाद, मैंने यही किया (@ john.k.doe दृष्टिकोण पर विस्तार करते हुए):

Xcode 7.2, स्विफ्ट 2 का उपयोग करना

  1. स्टोरीबोर्ड में, एक जोड़ने Navigation Itemके लिए जनक देखें नियंत्रक दृश्य (चाइल्ड वीसी)

नेविगेशन आइटम

  1. पर Attributes Inspectorअपने नए की Navigation Item, एक में टाइप spaceमें चरित्र Back Buttonक्षेत्र। इस पर और बाद में।

दृश्य पदानुक्रम में नेविगेशन आइटम

बैक बटन फ़ील्ड में एक अंतरिक्ष वर्ण जोड़ें

  1. में जनक दृश्य नियंत्रक, निम्न कोड जोड़ें:

टुकड़ा:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

स्पष्टीकरण:

बैक बटन माता-पिता दृश्य नियंत्रक का है। Navigation Itemआप वापस बटन के लिए एक संभाल, तो आप कोड में या स्टोरीबोर्ड में शीर्षक सेट कर सकते हैं देता है।

ध्यान दें:

यदि आप Navigation Item Back Buttonटेक्स्ट को डिफ़ॉल्ट खाली स्ट्रिंग के रूप में छोड़ देते हैं , तो बैक बटन शीर्षक "बैक" बन जाएगा।

अन्य दृष्टिकोण काम करते हैं, यह एक का उपयोग क्यों करें ?:

हालांकि चाइल्ड व्यू कंट्रोलर पर बैक बटन शीर्षक को ओवरराइड करना संभव है, लेकिन इसे संभालना एक चुनौती थी जब तक कि यह पहले ही स्क्रीन पर संक्षिप्त रूप से फ्लैश नहीं हुआ था।

कुछ दृष्टिकोण नए बैक बटन का निर्माण करते हैं और मौजूदा को ओवरराइड करते हैं। मुझे यकीन है कि यह काम करता है, और शायद कुछ उपयोग मामलों में आवश्यक है। लेकिन मैं जब संभव हो मौजूदा एपीआई का लाभ उठाना पसंद करता हूं।

titleकुछ स्थितियों के लिए मूल दृश्य नियंत्रक को बदलना सबसे तेज़ समाधान है। हालाँकि, यह मूल शीर्षक बदलता है इसलिए आपको राज्य का प्रबंधन करना होगा। चीजें भी गड़बड़ हो जाती हैं Tab Bar Controllerक्योंकि शीर्षक परिवर्तन से शीर्षक के साथ दुष्प्रभाव होते हैं Tab Bar Item


10

स्टोरीबोर्ड का उपयोग करने वालों के लिए, केवल अभिभावक का चयन करें (न कि लक्ष्य दृश्य रखने वाले व्यक्ति का) नियंत्रक फ्रेम देखें (सुनिश्चित करें कि आप नेविगेशन बार पर राइट क्लिक करते हैं, फिर गुण निरीक्षक खोलें, जहां आपको तीन फ़ॉर्म इनपुट मिलेंगे। तीसरा एक " बैक बटन ”वह है जिसे हम ढूंढ रहे हैं।


4
यदि आप स्थानीयकरण की परवाह नहीं करते हैं तो यह सबसे अच्छा उपाय है।
मिकेल

7

स्विफ्ट संस्करण:

आपके बच्चे में ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

यह वास्तव में स्टैक में पिछले व्यू कंट्रोलर के शीर्षक को "TEXT" में बदल देगा, जो आदर्श से कम है।
ग्रेविट्रॉन

6

यहाँ यह करने का एक और तरीका है।

अपने मूल दृश्य नियंत्रक में, निम्न विधि को लागू करें:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

जब आप शीर्षक बदलना चाहते हैं, तो आपके चाइल्ड व्यू कंट्रोलर में, यह काम करेगा:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

मैं parentViewControllerकाम करने के लिए संपत्ति प्राप्त करने में सक्षम नहीं था :

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

मुझे नहीं पता कि यह एक बग है या मैं इसे ठीक से उपयोग नहीं कर रहा हूं। लेकिन viewControllersसरणी व्यू में सेकंड-टू-लास्ट व्यू कंट्रोलर को पकड़ना पेरेंट व्यू कंट्रोलर को इंगित करता है, और मैं उस संदर्भ के साथ पेरेंट के तरीकों को सही ढंग से कॉल कर सकता हूं।


6

ठीक है। मैं व्यक्तिगत रूप से इन सभी विकल्पों से नफरत करता था। इसलिए मैं अपने साथ आया हूं।

जानकारी के आधार पर मैंने देखा है। ऐसा प्रतीत होता है कि पिछला दृश्य नियंत्रक अपने स्वयं के "बैक" बटन के नियंत्रण में है जिसे पुश दृश्य नियंत्रक पर प्रस्तुत किया जाएगा।

मैंने नियंत्रक पर नेविगेशन इट के लिए एक आलसी लोड विधि बनाई है जो बदले हुए बटन को चाहता है।

मेरा एक आमंत्रित क्रेता नियंत्रक है

खरीदार को आमंत्रित करें वह पाठ है जो डिफ़ॉल्ट रूप से सेट किया गया है।

लेकिन वापस बटन को आमंत्रित करने की आवश्यकता है

यहाँ वह कोड है जिसका उपयोग मैंने बैक बटन बनाने के लिए किया था।

मैंने इस कोड को नियंत्रक के कार्यान्वयन (.m) फ़ाइल के शीर्ष पर रखा और यह स्वचालित रूप से सुपर की विधि को ओवररोड करता है।

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

मुझे लगता है कि इसे पूरा करने के लिए यह बहुत अधिक सुरुचिपूर्ण तरीका है।

मैं इस कोड को एक जगह रखता हूं, और जरूरत पड़ने पर यह अपने आप पॉप्युलेट हो जाता है।

प्रत्येक पुश अनुरोध से पहले कोड को कॉल करने की आवश्यकता नहीं है।

उम्मीद है की यह मदद करेगा


5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

5

यहाँ जवाब है:

में viewDidAppear:animated(नहीं viewDidLoad) निम्नलिखित करते हैं

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

कि अगर आप बैक बटन का आकार रखना चाहते हैं।


इसके अलावा बुरा नहीं है कि वे इसे शीर्षक बदल सकते हैं। मैंने viewWillAppear में कोशिश की और यह काम नहीं करता है।
ट्रैविस एम।

5

यहाँ बताया गया कोई भी समाधान मेरे लिए काम नहीं आया। इसलिए मैंने जो किया वह उस दृश्य से शीर्षक को हटा दिया गया था जहाँ मैं निम्नलिखित तरीके से आया था:

self.title = @"";

इसलिए जब नया दृश्य प्रस्तुत किया जाता है तो पीछे का पाठ दिखाई नहीं देता है।

मैं इस बात से सहमत हूं कि यह एक स्पष्ट समाधान नहीं है, लेकिन काम किया है और मेरे द्वारा समझाया गया कोई भी काम नहीं किया है।


यार, मैं आपको बताऊंगा, यह 2017 है और बैक बटन को संभालने के लिए $ $ में यह अभी भी एक दर्द है। आपके तरीके ने मेरे लिए काम किया और मैं "<" साइन के साथ समाप्त हो गया, हालांकि मुझे "रद्द" शब्द चाहिए था, लेकिन मुझे जो मिला, उसके लिए मैं समझौता करूंगा। :)
AnBisw

5

मैंने पाया है कि नेविगेशन स्टैक में वर्तमान दृश्य नियंत्रक के शीर्षक को अगले दृश्य नियंत्रक पर धकेलने से पहले बैक बटन के वांछित पाठ में बदलना सबसे अच्छा है।

उदाहरण के लिए

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

फिर viewDidAppear में मूल कुलपति के लिए वांछित शीर्षक पर वापस शीर्षक सेट करें। देखा!


5

स्विफ्ट के लिए:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton

4

मैंने पाया है, कि बैक बटन का नाम बदलने का सबसे आसान तरीका व्यू कंट्रोलर्स शीर्षक को बैक बटन के शीर्षक पर सेट करना है, और फिर टाइटलव्यू को व्यू कंट्रोलर नेविगेशन आइटम में बदलकर एक कस्टम लेबल में बदलना है, जो वास्तविक है। नाम दें।

ऐशे ही:

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

यह UINavigationBar में आपका शीर्षक बना देगा जैसे कि यह मूल है। व्यू कंट्रोलर को अलग शीर्षक और बैक बटन शीर्षक देने की क्षमता देता है।

व्यू कंट्रोलर ए और बी के मामले में, ए यह बताने के लिए जिम्मेदार है कि यह बैक बटन कैसे दिखना चाहिए, जबकि बी प्रदर्शित होता है।

EDIT: यह बैक बटन देशी लुक (लेफ्ट एरो बार बटन आइटम) को भी बनाए रखता है।


4

यह कोड भी काम करता है। इसे नेविगेशन कंट्रोलर के रूट कंट्रोलर पर रखें:

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

4

IOS में नया है, लेकिन मैं नेविगेशन कंट्रोलर क्लास को ओवरराइड करने का अपना बहुत ही सरल उत्तर दूंगा। मेरे पास सरल पुश और पॉप विधियां हैं और पिछले दृश्य नियंत्रक के शीर्षक को बचाएं। Js ब्लॉक में चिपकाने के लिए क्षमा करें। थोड़ा भ्रमित था कि इसे सामान्य कोड ब्लॉक में कैसे पेस्ट किया जाए।

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end


4

self.navigationController.navigationBar.backItem.title = @"TEXT";

और स्विफ्ट में:

self.navigationController?.navigationBar.backItem?.title = "TEXT"

3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

आप इसे उस जगह पर रख सकते हैं जहाँ आप कोड को पेरेन्ट कंट्रोलर में पसंद करते हैं, जो आपको अलग-अलग बच्चे के विचारों के लिए अलग-अलग रीढ़ रखने की अनुमति देता है।


3

अधिकांश समाधान वांछित शीर्षक के साथ एक सामान्य बटन जोड़ते समय बैकबटन (बाएं तीर बार बटन) की मूल शैली को मारता है।
इसलिए मूल शैली को बनाए रखने के लिए 2 तरीके हैं:
1: अनिर्धारित बटन शैली (110 या ऐसा कुछ) का उपयोग करना, जिसे मैं नहीं करना पसंद करता हूं। लेकिन अगर आप चाहते हैं कि आप यहां पा सकते हैं कि स्टैकओवरफ्लो पर यह कैसे करना है।
2: I का उपयोग करने के लिए ट्रेन्स्को का विचार। मुझे यह पसंद आया और मैं इसे थोड़ा बदला हुआ उपयोग करता हूं।
ओवरराइड करने के बजाय - (NSString *) शीर्षक मैंने मूल शीर्षक को निम्नलिखित तरीके से रखने का फैसला किया है (जो मुझे नीब के शीर्षक के साथ-साथ पुश स्टेट बीडब्ल्यूटी में दिए गए शीर्षक का उपयोग करने की अनुमति देता है)।

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

यह समाधान अच्छा काम करता है और यह मूल दिखता है। इसके अलावा अगर viewDidLoad विधि में इसका उपयोग करते हैं तो यह निष्पादन को 1 से अधिक बार रोकता है।
इसके अलावा मैंने एक जेसीडेक के समाधान की कोशिश की है लेकिन यह बुरा लग रहा है। यह बैकबटन के वांछित और पीछे के मूल से मक्खी पर उपयोगकर्ता शीर्षक बार परिवर्तन को दिखाई देता है।


2

यह मेरे लिए पिछले पोस्ट किए गए उत्तरों के "सरलीकृत" संस्करण के रूप में काम करता है।

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

कोड को पेरेंट व्यू कंट्रोलर के अंदर रखना याद रखें (उदाहरण के लिए आपका टेबल व्यू या UITableViewController), कि बच्चे या डिटेल व्यू (जैसे UIViewController)।

आप इस तरह से बैक बटन स्ट्रिंग को आसानी से स्थानीय कर सकते हैं:

backButton.title = NSLocalizedString(@"Back Title", nil);

2

हमारे पास दो वीसी के ए और बी हैं।

यदि आप B में शीर्षक बदलना चाहते हैं, तो इस कोड को A में लिखें

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

स्विफ्ट 4.1 Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)

1

स्टेन का जवाब सबसे अच्छा था। लेकिन इसमें एक समस्या भी है, जब आप कंट्रोलर का उपयोग टैब बार के साथ करते हैं और कंट्रोलर के शीर्षक को बदलते हैं, तो आप टैब बार के शीर्षक को भी बदल सकते हैं। सबसे अच्छा उत्तर यह है कि केवल view_controller.navigationItem.title को बदल दें और view_controller.navigationItem का उपयोग करें समारोह में .title उत्तर यहाँ है: (एआरसी के साथ और उन्हें देखने के दृश्य में जोड़ें)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

खुद के उपयोग में, मैं इसे इस तरह से एक फ़ंक्शन बनाता हूं, बस व्यू लाइन में एक लाइन कोड के साथ फीचर है।

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}

1

यदि आप न केवल बैक बटन के टेक्स्ट को एक ही टेक्स्ट में बदलना चाहते हैं और मूल बाएं-तीर आकार में बने रहते हैं, बल्कि उपयोगकर्ता द्वारा बैक बटन पर क्लिक करने पर भी कुछ करना है, तो मैं आपको सलाह देता हूं कि मेरे " CustomNavigationController " के चारों ओर एक नज़र डालें । ।


1

समस्या: नेविगेशन पट्टी में "बैक" टेक्स्ट को प्रतिस्थापित नहीं किया जा सकता है।

REASON: "बैक" लेबल को किसी दृश्य को धकेलने के बाद नेविगेशन बार में सेट किया गया है क्योंकि मूल दृश्य नियंत्रक में .title विशेषता को शून्य (या आरंभिक नहीं) पर सेट किया गया था।

एक समाधान: यदि आप self.title = "जो भी ..." सेट करते हैं, तो आप देखेंगे कि "बैक" के बजाय नए व्यू कंट्रोलर को पुश करने के बाद "जो भी ..." दिखाई देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.