जवाबों:
से इस लिंक :
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
जैसा कि टायलर ने टिप्पणियों में कहा:
दृश्य व्यू कंट्रोलर में ऐसा न करें, लेकिन व्यू कंट्रोलर में अगर आप बैक बटन दबाते हैं तो आप देखेंगे
release
UIBarButtonItem
UIBarButtonItemStyleBordered
कॉल को प्रॉपर्टी से बदलें self.navigationItem.backBarButtonItem.style
। दस्तावेज़ीकरण: developer.apple.com/library/ios/documentation/uikit/reference/…
आप इंटरफ़ेस बिल्डर में पाठ सेट कर सकते हैं:
ViewController के नेविगेशन आइटम का चयन करें जो वापस बटन पर वापस आ जाएगा:
यूटिलिटीज पैनल विशेषता निरीक्षक में, बैक बटन के लिए अपना लेबल दर्ज करें:
मैं स्वीकार किए गए उत्तर के अनुसार कोड में शीर्षक सेट करने के लिए इस दृष्टिकोण को प्राथमिकता दूंगा।
ध्यान दें, आपको व्यू कंट्रोलर में यह करने की आवश्यकता है कि स्टैक ऊपर एक स्तर। दूसरे शब्दों में, दृश्य व्यू कंट्रोलर में ऐसा न करें, लेकिन व्यू कंट्रोलर में आप देखेंगे कि आपने बैक बटन मारा है या नहीं।
--Tyler
मैं इसका उपयोग करता हूं:
// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.backItem.title = @"Custom text";
}
मैंने स्टैक पर किसी अन्य कंट्रोलर को पुश करने से पहले कंट्रोलर के शीर्षक को सेट करके इसका एक आसान हल ढूंढा:
self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
फिर, मूल शीर्षक को viewWillAppear
इस तरह सेट करना सुनिश्चित करें:
-(void)viewWillAppear:(BOOL)animated
{
...
self.navigationItem.title = @"Original Title";
...
}
यह काम करता है क्योंकि UINavigationController
एक पुश ऑपरेशन के दौरान बैक बटन का निर्माण करते समय डिफ़ॉल्ट व्यवहार पिछले नियंत्रक से शीर्षक का उपयोग करना है।
बैक बटन का शीर्षक पिछले दृश्य के शीर्षक को डिफॉल्ट करता है इसलिए मैं जिस त्वरित चाल का उपयोग करता हूं वह पिछले कोड -m फ़ाइल पर निम्न कोड को रखना है।
-(void)viewWillAppear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Original Title";
}
-(void)viewWillDisappear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Back";
}
अपनी init विधि में, निम्न कोड जोड़ें:
- (id)initWithStyle:(UITableViewStyle)style {
if(self = [super init]) {
//...
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBack)];
self.navigationItem.leftBarButtonItem = customBackButton;
[customBackButton release];
//...
}
return self;
}
फिर एक सरल विधि जोड़ें, व्यूकंट्रोलर को खारिज करने की अनुमति देने के लिए:
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
ViewDidLoad या loadView में निम्न कोड जोड़ें
self.navigationController.navigationBar.topItem.title = @"Custom text";
मैंने आईफोन 9 के साथ आईफोन और आईपैड में इसका परीक्षण किया
navigationController
और topItem
गुणों पर वैकल्पिक self.navigationController?.navigationBar.topItem?.title = "Custom Text"
पुनर्स्थापना के उत्तर में जोड़ना। ऐप्पल के डॉक्स से ध्यान दें कि बैकबार्टन की घोषणा यह है:
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
इसलिए, पुनर्बलन का उत्तर मेमोरी को रिसाव करेगा क्योंकि संश्लेषित सेटर retain
आपके द्वारा इसे पारित करने का उदाहरण होगा , जिसे कभी भी स्पष्ट रूप से जारी नहीं किया जाता है। आप इसका उपयोग करके उपाय कर सकते हैंautorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
या आप उदाहरण पर एक चर इंगित कर सकते हैं ताकि आप इसे बाद में स्पष्ट रूप से जारी कर सकें:
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
उम्मीद है की यह मदद करेगा!
मैंने कुछ दिलचस्प खोजा है। यदि आप विधि को उप-विभाजित करते हैं UINavigationController
और pushViewController:animated:
विधि को ओवरराइड करते हैं और ऐसा कुछ करते हैं: (ध्यान रखें कि मैं एआरसी का उपयोग कर रहा हूं)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
फिर उन सभी के लिए ViewControllers
जिन्हें आपके नेविगेशन कंट्रोलर के साथ धकेला गया है, उनमें "बैक" बटन अपने आप आ जाएगा। यदि आप कुछ निश्चित नियंत्रकों के लिए पाठ को बदलना चाहते हैं, तो आप एक निश्चित वर्ग या अपने स्वयं के कस्टम प्रोटोकॉल के लिए व्यूकंट्रोलर कास्ट कर सकते हैं (जिसमें आपका व्यूकंट्रोलर विरासत में मिलता है, जिसमें से एक तरीका हो सकता है।backButtonText
या मूर्खतापूर्ण कुछ ऐसा ) जो आपको दे सकता है sothat में आने वाले viewcontroller के बारे में कुछ जानकारी आप इसके लिए बैक बटन टेक्स्ट को कस्टमाइज़ कर सकते हैं। अब बैक बटन टेक्स्ट को एक ऐसी जगह पर ध्यान दिया जाता है जो पूरी तरह से जिम्मेदारी को पकड़ना चाहिए। मुझे स्वीकार करना होगा कि पाठ को बदलने के लिए एक नया बटन बनाना, लेकिन ओह अच्छी तरह से।
क्या कोई ऐसा कारण सोच सकता है कि वह ऐसा क्यों नहीं करता? कम से कम आपको कम से कम व्यू कॉन्ट्रैक्टर के साथ फिडेल करने की जरूरत नहीं है या नेविगेशन कंट्रोलर पर व्यूकंट्रोलर को पुश करने से पहले एक नया बैक बटन बनाना याद रखना होगा।
लगाम का जवाब अच्छी तरह से काम करता है।
ध्यान दें कि यदि आप एक से अधिक व्यू कंट्रोलर को धक्का देते हैं, तो बदले हुए बटन का शीर्षक उनमें से प्रत्येक के लिए दिखाई देगा, जो कि वह नहीं है जो आप चाहते हैं।
उस स्थिति में, आपको हर बार व्यू कंट्रोलर को कस्टम UIBarButtonItem बनाने की आवश्यकता होगी।
इसके अलावा, सुनिश्चित करें कि दृश्य नियंत्रक को धक्का देने से पहले आप इसे कर लें , अन्यथा शीर्षक बदलते ही आपको स्क्रीन हिचकी मिलेगी।
ऑब्रे के सुझाव पर विस्तार करते हुए, आप इसे चाइल्ड व्यू कंट्रोलर में कर सकते हैं:
माता-पिता के नेविगेशन के पुराने मूल्यों को संग्रहीत करने के लिए दो चर बनाएं। item.title और माता-पिता के नेविगेशनItem
UINavigationItem* oldItem;
NSString* oldTitle;
में viewDidLoad
, निम्नलिखित जोड़ें:
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
में viewWillDisappear
, निम्नलिखित जोड़ें:
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
यह सही नहीं है। आप देखेंगे कि नए नियंत्रक के रूप में मूल दृश्य परिवर्तन का शीर्षक एनिमेटेड है। लेकिन यह बैक बटन के कस्टम लेबलिंग के लक्ष्य को प्राप्त करता है और इसे मानक बैक बटन की तरह आकार में रखता है।
viewDidLoad
इसे आप में डालिए , आशा है कि यह वही होगा जो आप खोज रहे हैं
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
अगर आप स्विफ्ट 3 में ARRIVING कंट्रोलर (कभी-कभी अधिक तर्क ..) में शीर्षक सेट करना चाहते हैं:
func setBackButtonNavBar(title: String, delay: Double){
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in
if let navBar = self.navigationController?.navigationBar{
navBar.backItem?.title = title
}
})
}
आगामी नियंत्रक में:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
आमतौर पर मैं एक नियंत्रक एक्सटेंशन में self.setBackButtonNavBar डालता हूं।
कोड में ऐसा करने से बैक बटन शैली को हटा दिया जाता है UINavigationConroller
। यदि आप अपने प्रत्येक दृश्य में एक नेविगेशन आइटम जोड़ते हैं, तो आप बैक बॉटलन का शीर्षक सेट कर सकते हैं StoryBoard
।
self.navigationController.navigationBar.topItem.title = @"Custom text";