टैब्बर आइटम शीर्षक से स्वतंत्र uiviewcontroller शीर्षक को बदलने के लिए कैसे


104

मैं अपना व्यू कंट्रोलर शीर्षक इस तरह सेट कर रहा हूँ कि देखने में लोड हुआ:

self.title = @"my title";

इससे पहले कि मैं कहानी बोर्डों में शीर्षक सेट करूँ, यह देखने के लिए है कि इसमें कौन सा नियंत्रक और नेविगेशन नियंत्रक है। मैंने इसे इस पर सेट किया: "शीर्षक";

जब मैं उस टैब पर क्लिक करता हूं जो व्यू कंट्रोलर को टैब बार आइटम का शीर्षक देता है और उसे uiviewcontrollerबदल देता है: मेरा शीर्षक

मैं दृश्य नियंत्रक को बदलना चाहूंगा लेकिन शीर्षक के साथ बने रहने के लिए टैब बार आइटम: शीर्षक

मैं यह कैसे हासिल कर सकता हूं?

जवाबों:


221

ऐसा लगता है कि आप चाहते हैं कि नेविगेशन बार में शीर्षक बदल जाए, लेकिन टैबबार में नहीं। ऐसा करना चाहिए।

[self.navigationItem setTitle:@"my title"];

स्विफ्ट:

self.navigationItem.title = "My Title"

1
सुनिश्चित करें, यदि आप अभी भी अपने uitabbar शीर्षक को सेट करने के लिए self.title का उपयोग कर रहे हैं, तो self.navigation setTitle सेट करने के लिए अन्यथा यह काम नहीं करेगा
simon_smiley

2
एक्सकोड 9 और आईओएस 11 में स्विफ्ट 4 में यह त्रुटि दिखाती है कि शीर्षक का अस्पष्ट उपयोग
सुशोभित

1
मेरे लिए Xcode 10.2 में स्विफ्ट 4.2 का उपयोग करके काम करना, एक टन धन्यवाद!
जंगलबस

174

तो उन लोगों के लिए जो अभी भी इसे प्राप्त नहीं करते हैं (मेरे जैसे)

self.navigationItem.title = @"my title";नेविगेशन बार शीर्षक सेट करता है ।

self.tabBarItem.title = @"my title";टैब बार शीर्षक सेट करता है ।

self.title = @"my title";इन दोनों को सेट करता है


20

तीव्र

शीर्ष बार शीर्षक सेट करें

self.navigationController?.navigationBar.topItem?.title = "top title"

टैब आइटम शीर्षक सेट करें

self.tabBarController?.tabBar.items?[0].title = "tab title"

दोनों शीर्षक सेट करें

self.title = "both titles"

क्या है topItem?
19

2
यह एकमात्र तरीका था जो मैं अपने कॉन्फ़िगरेशन में अपना शीर्ष बार शीर्षक सेट कर सकता था, यह निश्चित नहीं था कि "self.navigationItem.title" ने मेरे लिए काम क्यों नहीं किया।
जॉनीसी

7

के लिए स्विफ्ट इस का उपयोग,

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"

Xcode 9 और ios 11 में स्विफ्ट 4 (self.navigation.title) में त्रुटि दिखाते हुए कि शीर्षक का अस्पष्ट उपयोग
Sushobhit

6

नोट: यदि आपके पास प्रत्येक दृश्य नियंत्रक के मूल में नेविगेशन कंट्रोलर के साथ एक टैब बार नियंत्रक है, तो दृश्य बार पर टैब बार आइटम सेट करने से शीर्षक प्रभावित नहीं होगा यदि आप सेटिंग कर रहे हैं navigationItem.titletabBarItemटैब बार कंट्रोलर से चुनने के लिए आपको इसके बजाय नेविगेशन कंट्रोलर पर सेट करना होगा।

दूसरों द्वारा पोस्ट किए गए किसी भी उत्तर ने मेरे लिए काम नहीं किया क्योंकि मेरे टैब बार के दृश्य नियंत्रकों में सभी अपने रूट पर नेविगेशन नियंत्रक हैं - यह एक सामान्य पदानुक्रम पैटर्न है UITabBarController। आप नेविगेशन नियंत्रक है स्थापित करने के लिए tabBarItemशीर्षक प्राप्त करने के लिए के बजाय से अलग दिखाने के लिए navigationItemकी शीर्षक

आप अपने बना सकते हैं tabBarItemऔर उन्हें सीधे अपने वीसी के साथ जोड़ सकते हैं ।

    let tabBarVCOne = BooksListViewController()
    tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)

    tabBarViewControllers.append(tabBarVCOne)
    ...

फिर आपके पास कुछ इस तरह होगा:

    //Wrap each view controller in a navigation controller. 
    self.viewControllers = tabBarViewControllers.map(UINavigationController.init)

लेकिन उस tabBarItemदृश्य नियंत्रक से पहले से जुड़े हड़पने के लिए निम्नलिखित को बदल दिया जाना चाहिए और इसे स्वचालित रूप से नेविगेशन नियंत्रक पर सेट करना चाहिए।

    self.viewControllers = tabBarViewControllers.map({
        let navigationController = UINavigationController(rootViewController: $0)
        navigationController.tabBarItem = $0.tabBarItem
        return navigationController
    })

अब आप अपने लिए निर्धारित शीर्षक से अलग एक अलग शीर्षक (अपने वीसी से सेट) ले सकेंगे tabBarItem


0

इस पर बहुत देर हो गई। आप अपने TabBarController के लिए UITabBarControllerDelegate और खुद के लिए UINavigationControllerDelegate और क्रमशः अपने प्रत्येक टैब में एम्बेडेड नेविगेशन कंट्रोलर के रूप में सेवा कर सकते हैं।

ज:

@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>

@end

।म:

- (void) viewDidLoad {
    // UITabBarControllerDelegate
    self.delegate = self;

    // UINavigationControllerDelegates
    yourNavigationController.delegate = self;
    ...
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    yourNavigationController.tabBarItem.title = @"Tab Bar Title";
    ...
}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    yourNavigationController.tabBarItem.title = @"Tab Bar Title";
    ...
}

कुछ त्वरित परीक्षण के आधार पर, ऐसा लगता है कि इन दो प्रतिनिधि कार्यों को किसी भी ढीले मामलों को कवर करना चाहिए और शीर्षक को अपडेट करेगा कि क्या आप अपने नेविगेशन नियंत्रक में टैब स्विच कर रहे हैं या ब्राउज़ कर रहे हैं। पूर्णता के लिए, आप अपना शीर्षक didShowViewController में भी अपडेट कर सकते हैं , लेकिन जो मैंने देखा है उसके आधार पर, मुझे नहीं लगता कि यह आवश्यक है।


0

शायद थोड़ी देर (लेकिन)।

VC के शीर्षक को सेट करने से नेविगेशन और टैबबार का शीर्षक बदल जाता है। (यदि वीसी पहले से ही दोनों से जुड़ा हुआ है)।

यदि आप अलग-अलग शीर्षक रखना चाहते हैं, तो आपको मैन्युअल रूप से उन्हें सेट करने की आवश्यकता है, आप सामान्य रूप से वीसी के लिए शीर्षक निर्धारित करते हैं और फिर विशेष रूप से टैबबाइट का शीर्षक, क्योंकि यह एक संपत्ति है


0

स्विफ्ट 4.2

यहाँ आप जाते हैं, मैंने UIViewController के लिए एक एक्सटेंशन बनाया:

import UIKit

extension UIViewController {

/// Setting the navigation title and tab bar title
///
/// - Parameters:
///   - navigationTitle: Navigation title
///   - tabBarTitle: TabBar title
func setTitles(navigationTitle: String, tabBarTitle: String) {
    // Order is important here!
    title = tabBarTitle
    navigationItem.title = navigationTitle
 }

}

और फिर अपने नियंत्रक से:

override func viewDidLoad() {
    super.viewDidLoad()
    setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.