स्विफ्ट में बैक बटन टेक्स्ट कैसे सेट करें


207

आप बैक बटन टेक्स्ट को कैसे हटाते हैं।

वर्तमान बैक बटन:

<वापस

वांछित बैक बटन:

<कुछ भी

इनमें से किसी ने भी काम नहीं किया है:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

जवाबों:


604

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

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

स्विफ्ट 3, 4 और 5:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

या

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)

9
बहुत बहुत धन्यवाद, आप नहीं जानते कि मैं उस छोटे से विवरण (पिछले नियंत्रक) के लिए कितने घंटे बिताता हूं
रिकार्डो

3
अगर मैं एक लाख बार उत्थान कर सकूं तो मैं करूंगा। आपको बता नहीं सकता कि मैंने यह सोचकर कितना समय बिताया है कि यह काम क्यों नहीं कर रहा था (पहले गंतव्य नियंत्रक पर था)
डायलन आयरलैंड

13
"पिछला बटन पिछले व्यू कंट्रोलर का है" जो कि इस विषय के बारे में सबसे मूल्यवान उत्तर है! धन्यवाद!
vhristoskov

1
स्थापना titleमें परिवर्तन शीर्षक ही नहीं, वापस बटन।
यारिव निसिम

4
! मैं self.navigationController .navigationBar.topItem .backBarButtonItem = backItem बजाय navigationItem.backBarButtonItem = backItem और यह स्विफ्ट 3. पर ठीक काम करता है धन्यवाद का जोड़ा
इंद्र एडम

125

आप इसे इंटरफ़ेस बिल्डर से निम्नानुसार कर सकते हैं:

पिछले व्यू कंट्रोलर के नेविगेशन आइटम पर क्लिक करें

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

इंस्पेक्टर इंस्पेक्टर से बैक बटन टेक्स्ट सेट करें जो आप चाहते हैं। बस!!

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


1
'nil' असाइन करने का सबसे अच्छा तरीका क्या है?
kennydust

@kennydust क्या आपको खाली शीर्षक से मतलब है?
अजिंक्य पाटिल

8
@kennydust हाँ बैक बटन में स्पेस जोड़ें और एंटर दबाएँ
Ajinkya Patil

अच्छा और आसान है, लेकिन क्या यह स्थानीय है?
ग्रंटकैक्स

2
@AjinkyaPatil मैंने यह कोशिश की लेकिन बैक बटन दिखाई नहीं देता है। किसी भी कारण से यह क्यों हो सकता है?
user805981

48

बैक-बटन टेक्स्ट पैरेंट व्यू-कंट्रोलर के नेविगेशन आइटम टाइटल से लिया गया है। इसलिए जो भी आप पिछले दृश्य-नियंत्रक के नेविगेशन आइटम शीर्षक पर सेट करते हैं, उसे वर्तमान दृश्य नियंत्रक के बैक बटन टेक्स्ट पर दिखाया जाएगा। आप पेरेंट व्यू-कंट्रोलर की व्यूप्लेयर विधि में नेविगेशन आइटम शीर्षक के रूप में बस "" डाल सकते हैं।

self.navigationItem.title = ""

दूसरा तरीका है

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

वर्तमान दृश्य नियंत्रक के दृश्य में। विधि विधि। अगर नेविगेशन स्टैक बहुत नेस्टेड है तो यह किसी और समस्या का कारण बनेगा।


5
self.navigationItem.title = "" सर्वश्रेष्ठ उत्तर के रूप में शीर्ष पर होना चाहिए!
rilar

मैं इस बात से सहमत हूं कि सबसे अच्छा उत्तर कारण ऊपर दिए गए सभी उत्तरों को नेविगेशन आइटम में एक लक्ष्य फ़ंक्शन जोड़ने की आवश्यकता है, इसलिए वे न केवल पाठ को बदल रहे हैं, बल्कि वे एक कस्टम पॉप फ़ंक्शन भी जोड़ते हैं, जिसे प्रश्न की आवश्यकता नहीं है!
ईशा

यह ठीक काम करता है prepareForSegue, जो है थोड़ा क्लीनर क्योंकि आप नए viewController को लोड करने के बाद बदल नहीं रहे हैं।
एड्रियन

ध्यान दें!!! self.navigationItem.title = "" पर कॉल करने से पहले self.title = "....." डालें
Bary Levy

45

आप कोड के इस 3 लाइन डाल सकते मेंViewController तुम वापस बटन का शीर्षक बदलना चाहते हैं।

अपने में override func viewDidLoad() {}

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
यह समाधान अधिक सही लगता है, क्योंकि आप तर्क वीसी के पास वीसी नहीं छोड़ रहे हैं। Aka: बेहतर पढ़ता है।
eonist

37

यदि आप दृश्य नियंत्रक के लिए xib फ़ाइल का उपयोग कर रहे हैं तो अपने दृश्य नियंत्रक वर्ग में ऐसा करें।

class AboutUsViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    edgesForExtendedLayout = []
    setUpNavBar()
}

func setUpNavBar(){
    //For title in navigation bar
    self.navigationController?.view.backgroundColor = UIColor.white
    self.navigationController?.view.tintColor = UIColor.orange
    self.navigationItem.title = "About Us"

    //For back button in navigation bar
    let backButton = UIBarButtonItem()
    backButton.title = "Back"
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}

}

परिणाम होगा:

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


29

मुझे नहीं पता कि आपने अपने तरीकों का उपयोग कहां किया है जो आपने अपने प्रश्न पर रखा है, लेकिन मैं वांछित परिणाम प्राप्त कर सकता हूं यदि मैं उपयोग करता हूं, तो मेरी ViewControllerकक्षा पर (जिसमें मैं बैक बटन बदलना चाहता हूं), viewDidLoad()फ़ंक्शन पर , निम्न पंक्ति:

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

परिणाम होगा:

इससे पहले

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

उपरांत

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


3
मेरे मामले में यह केवल तभी काम करता है जब आप इस कोड को viewDidAppear पद्धति पर रखते हैं न कि viewDidLoad एक
Apinho

2
navigationController.navigationBar.topItem?.title = ""इसे लगाने से बचने के लिए उपयोग करेंviewDidAppear
जोस

यह सबसे संतोषजनक तरीका लगता है और फ्लैश से बचा जाता है क्योंकि बैक बटन का शीर्षक कॉलिंग कंट्रोलर (धीमे उपकरणों) में "self.navigationItem.title =" "का उपयोग करके बदल दिया जाता है। इसके अलावा अन्य स्थिति जहां self.navigationItem.title = "" को पूरी तरह से नजरअंदाज कर दिया जाता है, जो प्रोग्राम कंट्रोलर टैब स्विच के जरिए प्रोग्राम कंट्रोलर में जल्दी से ट्रांसमिट हो जाता है।
फ्लिफ़्लैम वीर

22

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

स्विफ्ट 4:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

12

आप स्टोरीबोर्ड में केवल नेविगेशन इटेम को संशोधित कर सकते हैं

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

बैक बटन में स्पेस डालें और एंटर दबाएं।

नोट: पिछले वीसी में ऐसा करें।


8

स्विफ्ट 4 - किसी भी व्यू कंट्रोलर को पुश करने से पहले बैक बटन को कॉन्फ़िगर करें

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

यह काम करना चाहिए:

override func viewDidLoad() {
    super.viewDidLoad()

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
    self.navigationItem.backBarButtonItem = button

}

func goBack()
{
    self.navigationController?.popViewControllerAnimated(true)
}

हालाँकि यह अनुशंसित नहीं है क्योंकि यह वास्तव में बैकबटन की जगह लेता है और इसने बैक एरो और स्वाइप जेस्चर को भी हटा दिया है।


10
ऐसा करने का सही तरीका नहीं है, आप सिर्फ पीछे के बटन को बदल रहे हैं
यारिव निसिम

इंटरफ़ेस बिल्डर से इसे करने के लिए बेहतर है
रटगर Huijsmans

7

स्विफ्ट 4.2

यदि आप नेविगेशन बार बैक बटन आइटम टेक्स्ट को बदलना चाहते हैं, तो इसे viewDidLoadकंट्रोलर से पहले रखें जहाँ बैक बटन दिखता है, न कि व्यू कंट्रोलर पर जहाँ बैक बटन दिखाई देता है।

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

यदि आप वर्तमान नेविगेशन बार टाइटल टेक्स्ट को बदलना चाहते हैं, तो नीचे दिए गए कोड का उपयोग करें (ध्यान दें कि यह नेविगेशन कंट्रोलर पर धकेल दिए गए NEXT दृश्य के लिए डिफ़ॉल्ट बैक टेक्स्ट बन जाता है, लेकिन यह डिफ़ॉल्ट बैक टेक्स्ट ऊपर दिए गए कोड द्वारा ओवरराइड किया जा सकता है)

 self.title = "Navigation Bar Title"

6

इसके दो तरीके हैं।

1. पिछले व्यू कॉन्ट्रोलर में .व्यूडीडलड ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2. वर्तमान दृश्य नियंत्रक में।

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

कारण: से backButtonआता है navigationBar.backItem.backBarButtonItem, इसलिए पहला तरीका स्पष्ट है। वर्तमान में दृश्यरोल्टर .viewDidLoad (), हम संदर्भ प्राप्त नहीं कर सकते backItem, क्योंकि viewDidAppear () में, इसके .so पर navigationBarधकेल दिए जाने से हम परिवर्तन कर सकते हैं।navigationViewstackbackItem currentViewController में। viewDidAppear ()

अधिक जानकारी के लिए, आप दस्तावेज़ देख सकते हैं : UINavigationBar


3

वर्तमान नियंत्रक जोड़ने की viewDidLoadविधि में :

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

2

हालाँकि ये उत्तर समस्या को ठीक करते हैं लेकिन यह कुछ उपयोगी हो सकता है

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

स्विफ्ट 4

जबकि पिछली बार सेग की तैयारी करने के लिए कहा गया है कि यह सही है और इसका असली बटन पिछले वीसी का है, इसका सिर्फ एक गुच्छा अधिक अनावश्यक कोड है।

सबसे अच्छी बात यह है कि viewDidLoad में वर्तमान वीसी का शीर्षक सेट किया गया है और यह स्वचालित रूप से अगले वीसी पर सही ढंग से बैक बटन शीर्षक सेट करेगा। इस लाइन ने मेरे लिए काम किया

navigationController?.navigationBar.topItem?.title = "Title"

2

यह स्विफ्ट 5 के लिए काम करता है :

self.navigationItem.backBarButtonItem?.title = ""

कृपया ध्यान दें कि यह अगले धकेलने वाले दृश्य नियंत्रक के लिए प्रभावी होगा न कि प्रदर्शन पर वर्तमान में, यही कारण है कि यह बहुत भ्रामक है!

इसके अलावा, स्टोरीबोर्ड की जांच करें और पिछले दृश्य नियंत्रक के नेविगेशन आइटम का चयन करें फिर बैक बटन (इंस्पेक्टर) में कुछ लिखें।


1

यह कोशिश करो ... यह काम करेगा ...।

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

उपरोक्त कोड पाठ को छिपाएगा और नेविगेशन बार पर केवल पीछे का तीर दिखाएगा।


0

self.title = "" पहले सेट करें self.navigationController?.pushViewController(vc, animated: true)


0
override func viewWillAppear(_ animated: Bool) {

    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}

func goToNoteEditorViewController(){
   // action what you want
}

आशा करता हूँ की ये काम करेगा!! # स्विफ्ट 3


0

यदि आप पृष्ठ दृश्य नियंत्रक पृष्ठ से किसी व्यू कंट्रोलर को पुश कर रहे हैं, तो आप नेविगेशन कंट्रोलर के बैक बटन शीर्षक को अपडेट नहीं कर सकते। इसे हल करने के लिए अपने पैरेंट व्यू कंट्रोलर को एक प्रतिनिधि बनाएँ (आप पेरेंट तक वापस व्यू कंट्रोलर पदानुक्रम को भी देख सकते हैं)।

इसके अलावा, बैक बटन में कैरेक्टर लिमिट होती है। यदि आप उस वर्ण सीमा को पार कर जाते हैं, तो सिस्टम "बैक" पर डिफ़ॉल्ट हो जाएगा। यह आपके लिए कम नहीं होगा। उदाहरण के लिए:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

0

स्विफ्ट 4

मेरे मामले में समाधान बाल दृश्य नियंत्रक के लिए जाने से पहले मास्टर व्यू कंट्रोलर के नेविगेशन आइटम को साफ़ करना था। और इसे फिर से सेट करें यदि यह फिर से दिखाया गया है

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

और यह है कि मैं कैसे एक UIViewController धक्का और बच्चे नियंत्रक में पीछे बार बटन आइटम साफ़ करें:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)


0

GOTCHA: यदि आप कई तारांकित सुझावों में से किसी से भी परेशान हैं, तो सुनिश्चित करें कि आप अपना UITableViewCells रजिस्टर कर रहे हैं viewDidLoad(), इससे नहींinit()


-1

समाधान की जाँच की और स्विफ्ट 5 में काम करें

नीचे मैंने विभिन्न मामलों के लिए कुछ समाधान दिए हैं:

1. बैक बटन से टेक्स्ट निकालें

बैक बटन से टेक्स्ट हटाने का सबसे अच्छा उपाय है व्यूडलड में जोड़ना ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. बैक बटन पर खुद का टेक्स्ट सेट करें

यदि आप अपना स्वयं का शीर्षक सेट करना चाहते हैं, तो इसे बैकबटन का शीर्षक सेट करके करें:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3. सभी वीसी पर खाली बटन

यदि आप संपूर्ण एप्लिकेशन में सामान्य शैली बनाना चाहते हैं - पाठ के बिना केवल तीर वापस करने के लिए, अपने सभी दृश्य नियंत्रकों के लिए आधार VC बनाएं:

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

ऊपर प्रस्तुत समाधान आपको भविष्य में बैक बटन को अनुकूलित करने देता है यदि आप बाद में कुछ अपवाद बनाना चाहते हैं, तो अतिरिक्त चर जोड़कर इसे विशिष्ट ViewController, f.ex में ओवरराइड करें:

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

तेज ४

वर्तमान दृश्य से प्रोग्राम बैकबोटन में पाठ को बदलने का एक तरीका है वर्तमान नियंत्रक:

navigationController?.navigationBar.items![0].title = "some new text"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.