एक iOS UIBarButtonItem के शीर्षक पाठ को हटाना


198

जो मैं करना चाहता था UIBarButtonItemवह नेविगेशन बार पर केवल नीले रंग के शेवरॉन को छोड़कर 'बैक' बटन से टेक्स्ट को हटाना है । ध्यान रखें कि मैं iOS 7 के लिए विकसित कर रहा हूं। मैंने कई तरीकों की कोशिश की है, जिनमें शामिल हैं, लेकिन यह सीमित नहीं है:

यह छवि विधि है जो मुझे पसंद नहीं है (छवि जगह से बाहर देखी गई):

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

एक और तरीका मैंने आजमाया, जो बस काम नहीं आया (कुछ भी प्रदर्शित नहीं किया गया):

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title=@"";
self.navigationItem.leftBarButtonItem=barBtn;

जो मैं हासिल करना चाहता था वह आईओएस 7 म्यूजिक ऐप में पाए गए बैक बटन जैसा है, जिसमें केवल एक ही शेवरॉन है।

धन्यवाद।


इस उत्तर को देखें stackoverflow.com/a/20300577/1589731
ayalcinkaya

आप अपनी आवश्यकता का चित्र क्यों नहीं लेते हैं? और इसे leftBarButtonItem में देखें।
विशाल शर्मा

चित्र विधि का उपयोग नहीं करने का कारण यह है कि 1. पीछे के बटन की एक सही तस्वीर प्राप्त करना बहुत कठिन है और 2. छवि के साथ गलत चित्रण का कोई रूप होगा और यह स्वाभाविक नहीं लगता है, और यही कारण है कि मैं StackOverflow के लिए इस देशी कैसे पूरा करने पर मदद के लिए ले लिया।
पैन ज़ियू

जवाबों:


198
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

फिर आप बैक बटन आइटम शीर्षक को हटा सकते हैं।

यदि आप स्टोरीबोर्ड का उपयोग करते हैं, तो आप अंतरिक्ष के साथ नेविगेशन विशेषताओं इंस्पेक्टर बैक बटन सेट कर सकते हैं।


95
बड़े शीर्षक के साथ एक समस्या है: वे केंद्रित नहीं हैं, लेकिन दाईं ओर धकेल दिए गए हैं, जैसे कि बैक बटन पाठ अभी भी था
सोनक्सुरेक्सो

11
यह काम नहीं करता है यदि उपयोगकर्ता "एक्सेसिबिलिटी - बटन शेप्स" पर मुड़ गया है
मिकेल बार्टलेट

22
मुझे लगता है कि यह एक बेहतर जवाब है:[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
बेंजामिन

19
इसमें जादू की संख्या के साथ कोई भी समाधान एक बुरा विचार है। ऑटोलैयूट, आकार की कक्षाओं, अभिगम्यता की विशेषताओं, आदि के लिए धक्का के साथ .. इस तरह के निरंतर मूल्यों का उपयोग करना आपको काटने के लिए बाध्य है।
माइकल पीटरसन

3
बेंजामिन की टिप्पणी सुधार करने के लिए, आप के लिए यह तय करना चाहिए UIControlStateHighlightedऔर साथ ही
n_b

411

अपने शीर्षक उपयोग को बदले बिना किसी व्यू कंट्रोलर को बैक बटन शीर्षक सेट करने के लिए:

उद्देश्य सी:

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

स्विफ्ट:

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

स्पष्ट होने के लिए, यह दृश्य नियंत्रक पर किया जाता है जिसे आप देखेंगे कि क्या आपने बैक बटन मारा है। यानी '' सेटिंग्स '' देखने के बजाय आप '<' को देखना चाहते हैं, फिर अपने SettingsViewController पर आप इसे अपने अंदर डालेंगे init। तब आपको शीर्षक की कोई भी समस्या तब नहीं दिखाई देती जब आप व्यू कंट्रोलर को देख रहे होते हैं।


1
मैं नहीं जानता कि क्यों दूसरे जवाब को सही के रूप में चिह्नित किया गया है, इसके सिर्फ शीर्षक को हटा दिया गया है, इसलिए बैक बटन डेंट को दिखाने के लिए "शीर्षक" है, लेकिन यह बिल्कुल सही दृष्टिकोण नहीं है! यह सही उत्तर होना चाहिए।
पच

8
स्विफ्ट का उपयोग करने वाले किसी भी व्यक्ति के लिए, यह नेविगेशन है। यहबैकबैक बरबटन इटेम = यूबेरबटनटन (शीर्षक: "", शैली: .Pain, लक्ष्य: nil, एक्शन: nil)। ओबज-सी से स्विफ्ट में बदलना मुश्किल नहीं है, लेकिन मैं आपको परेशानी से बचाऊंगा
जोय

15
@BenjaminPiette क्या आप इसे UIViewController पर कॉल कर रहे हैं जिसे आप देखेंगे कि क्या आप बैक बटन दबाते हैं? UIViewController नहीं है जो बैक बटन प्रदर्शित करता है।
डोनाल्डिया

2
क्या एक सुंदर समाधान! धन्यवाद। यह सिर्फ ऑफसेट बात करने के लिए सही नहीं लगा।
हाइड 00

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

128

यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं, तो आप Attributes InspectorViewController पर जा सकते हैं Navigation Item(पर क्लिक करें Navigation Bar) और Back Buttonसंपत्ति को "" (एक एकल वर्ण) पर सेट करें । यह बैक बटन शीर्षक को एक स्पेस कैरेक्टर पर सेट करेगा, जिससे शेवरॉन दिखाई देगा। कोड के साथ गड़बड़ करने की कोई जरूरत नहीं है।

उदाहरण छवि

ध्यान दें कि यह बैक बटन के लिएBack Button शीर्षक सेट करेगा जो इस व्यू कंट्रोलर से उस पर Back Buttonकरेगा जो इसके शीर्ष पर धकेल दिया गया था, न कि इसके लिए इस नियंत्रक के अंदर प्रदर्शित किया जाएगा!


10
काश मैं इसे और बढ़ा सकता: "ध्यान दें कि यह बैक बटन के लिए बैक बटन शीर्षक सेट करेगा जो इस व्यू कंट्रोलर को देगा जो कि इसके ऊपर धकेल दिया गया था, बैक बटन के लिए नहीं जो इसके अंदर प्रदर्शित होगा नियंत्रक! "
जेसन लेन

121

यह मेरे लिए बिना किसी पाठ के सिर्फ 'बैक' शेवरॉन प्रदर्शित करने के लिए काम करता है:

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

इस संपत्ति viewDidLoadको नेविगेशन बार पेश करने वाले व्यू कंट्रोलर में सेट करें और यह ट्रिक करेगा।

नोट: मैंने इसे केवल iOS 7 में परीक्षण किया है, जो प्रश्न के दायरे में है।


33
नेविगेशन बार के बीच में शीर्षक लेबल को हटाने का साइड इफेक्ट है।
पावनेर

7
उसी प्रॉपर्टी के साथ 'viewWillAppear' पर वीसी को धक्का देने का शीर्षक सेट करें। इस तरह इसे हटाया नहीं जाता है।
गुटो आराजू

5
मैंने उस कोड को -viewDidLoadउस वीसी के पास ले जाया कि मुझे बैक टेक्स्ट नहीं चाहिए। हालाँकि, बाद में मुझे जो पता चला वह यह था कि जब मैं navigationControllerशीर्षक पाठ से 2 वें वीसी को पॉप करता हूँ , तो कुछ ही समय बाद प्रकट होता है, तुरंत नहीं। मुझे लगता है कि एक वीडियो यह बेहतर वर्णन करेगा ताकि यह यहां हो: लिंक
पैन ज़ियू

1
यह सबसे अच्छा जवाब नहीं है, कृपया andyleehao के जवाब का उल्लेख करें: [[UIBarButtonItem उपस्थिति] setBackButtonTitlePositionAdjustment: UIOffsetMake (0, -60 )BarMetrics: UIBarMetricsDefault];
lnnbeyond

1
यह Apple के प्रलेखन के अनुसार सही उत्तर है: "जब रिसीवर नेविगेशन आइटम स्टैक पर होता है और दूसरे शब्दों में शीर्ष से दूसरे स्थान पर होता है, तो इसका दृश्य नियंत्रक उन विचारों का प्रबंधन करता है जो उपयोगकर्ता इस संपत्ति में वापस नेविगेट करेगा - मान शीर्ष-सबसे नेविगेशन पट्टी पर बैक बटन के लिए उपयोग किया जाता है। यदि इस संपत्ति का मूल्य शून्य है, तो सिस्टम बैक बटन के पाठ के रूप में स्ट्रिंग "बैक" का उपयोग करता है।
राफेल ओलिवेरा

27

जब आप बटन का शीर्षक सेट कर रहे हों, तो @ "" के बजाय "" का उपयोग करें।

--EDIT--

जब आप अन्य तारों की कोशिश करते हैं तो कुछ भी बदलता है? मैं स्वयं निम्नलिखित कोड का सफलतापूर्वक उपयोग कर रहा हूं:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString एक ऐसा वैरिएबल है जो @ "या" "बैक" पर सेट है, यह इस बात पर निर्भर करता है कि मैं iOS 7 या उससे कम वर्जन पर हूं।

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


हम्म, आईओएस 7 को बदलने के लिए प्रतीत नहीं होता है। यह शीर्षक के रूप में "बैक" का उपयोग करता रहता है। अगर मैं setLeftBarButtonItem:backButtonइसके बजाय कुछ भी नहीं होता।
पैन ज़्यूए

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

27

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

कभी-कभी चीजों को संदर्भ में देखना मददगार होता है। यहां एक न्यूनतम प्रोजेक्ट है जो "बैक" टेक्स्ट को छुपाता है लेकिन फिर भी तीर दिखाता है।

स्टोरीबोर्ड

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

"शो सेकेंड व्यू कंट्रोलर" बटन से दूसरे व्यू कंट्रोलर तक एक शो सेगमेंट है।

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

कोड

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

वैकल्पिक विधि (केवल आईबी, कोई कोड नहीं)

स्टोरीबोर्ड पर पहले दृश्य नियंत्रक (दूसरा नहीं) के लिए नेविगेशन आइटम का चयन करें । बस बैक बटन टेक्स्ट के लिए एक स्थान दर्ज करें।

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


मुख्य अवधारणा जो "पहले दृश्य नियंत्रक के लिए (दूसरी नहीं)" जैसा कि कुलपति का नाम है जिसे आप वापस आना चाहते हैं इसलिए यह शीर्षक देने की जिम्मेदारी है।
बुगुइबू

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

1
आप topItem के बजाय backItem का उपयोग कर सकते हैं। TopItem शीर्षक छिपाएगा, जबकि backItem बैक बटन शीर्षक छिपाएगा।
रवि ओझा

2
यह एकमात्र समाधान है अगर बच्चा व्यू कॉन्ट्रोलर नेवीगेशनकंट्रोलर के बच्चों के ढेर में 2+ की गहराई पर है
नथानिएल ब्लमर

2
यह पिछले व्यू कंट्रोलर के शीर्षक को भी हटा देगा। ज्यादातर मामलों में, यह चूसने वाला है
CalZone

11

IOS7 पर, Apple ने UINavigationBar, 'backIndicatorTransitionMaskImage' और 'backIndicatorImage' दो नई प्रॉपर्टीज़ पेश कीं।

बस एक बार कॉल करके:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

यह डिफ़ॉल्ट शेवरॉन ग्लिफ़ के बजाय एक कस्टम छवि प्रदान करेगा, जो कीविन्डो के टिंट रंग को विरासत में मिला है।

और शीर्षक हटाने के लिए, मैं कामरस के उत्तर का सुझाव दूंगा। इस कोड को अपने नए व्यू कंट्रोलर को देखने वाले व्यू कंट्रोलर पर कॉल करना याद रखें। एक iOS UIBarButtonItem के शीर्षक पाठ को हटाना


रंग रंग को समायोजित करने के लिए [[UINavigationBar उपस्थिति] setTintColor: [UIColor whiteColor]];
Mazen Kasser

10

मुझे प्रदान किए गए उत्तर के साथ बहुत अधिक सफलता नहीं मिली, लेकिन मुझे वास्तव में सरल काम मिला। अपने स्टोरीबोर्ड में, आप अपने UIViewController के नेविगेशन आइटम पर क्लिक कर सकते हैं और बैक बटन टेक्स्ट सेट कर सकते हैं। मैंने इसे एक सिंगल 'स्पेस में सेट किया और इसने मुझे वह व्यवहार दिया, जिसकी मुझे तलाश थी।यहां छवि विवरण दर्ज करें


10

इसने मेरे लिए iOS10 में काम किया। इसे व्यू कंट्रोलर की viewDidLoad से कॉल करें।

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

6

इस समस्या का सरल समाधान, iOS7 के साथ-साथ 6 पर काम करना है, viewDidLoad में कस्टम शीर्षक दृश्य सेट करना है:

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

फिर, viewWillAppear में: आप सुरक्षित रूप से कॉल कर सकते हैं

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

क्योंकि आपका शीर्षक दृश्य कस्टम दृश्य है, यह नेविगेशन स्टैक में वापस जाने पर अधिलेखित नहीं होगा।


मुझे केवल कोड के बाद वाले भाग की आवश्यकता थी, न कि रिक्त यूआईबेल की। मैं [self.navigationItem.backBarButtonItem setTitle:@" "];viewWillAppear में कॉल कर रहा था, लेकिन यह एक मोडल व्यू को खारिज करने के बाद प्रस्तुत किए गए विचारों पर काम नहीं कर रहा था ।
13

6

वास्तव में आप ऐसा सिर्फ एक ट्रिक से कर सकते हैं:

UINavigationBarवर्ग को ओवरराइड करें और इस कोड को जोड़ें:

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

फिर UINavigationControllerइस कस्टम UINavigationBar वर्ग .. आदि के साथ अपना इनिशियलाइज़ करें ।UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

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


इसने मेरे लिए काम किया। हालांकि ऐसा लगता है जैसे कि iOS 7 पर पुश एनीमेशन में थोड़ा हकलाना है: शीर्षक पीछे के बटन के लिए जगह बनाने लगता है तब से केंद्र नहीं है।
ज़ेकेल

हां, सीधे नेविगेशनटैम.टाइट को सेट करने के बजाय कस्टम टाइटल व्यू का उपयोग करने का प्रयास करें। मुझे लगता है कि अपनी समस्या को ठीक करना चाहिए।
rordulu

यह समाधान हर नेविगेशनबीआर के लिए विश्व स्तर पर भयानक कारण है जो सब-क्लास है। धन्यवाद
Yetispapa

5

मैं डोनालिया के उत्तर का उपयोग करके एक साथ कुछ करने में सक्षम था। इस प्रकार मेरा UIViewController उपवर्ग में समाधान दिखाई देता है:

var backItemTitle:String?

override func viewDidLoad() {
    super.viewDidLoad()

    //store the original title
    backItemTitle = self.navigationController?.navigationBar.topItem?.title

    //remove the title for the back button
    navigationController?.navigationBar.topItem?.title = ""
}

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {

        //restore the orignal title
        navigationController?.navigationBar.backItem?.title = backItemTitle
    }
}

मूल उत्तर के साथ समस्या यह है कि यह नियंत्रक से शीर्षक हटाता है जब आप इसे वापस पॉप करते हैं। दृश्य में शीर्षक को रीसेट करने का प्रयास कर रहा हैडिलीसेपियर संक्रमण प्रक्रिया में बहुत देर हो चुकी है; यह शीर्षक को अच्छी तरह से एनिमेट करने के बजाय वापस स्नैप करने का कारण बनता है। हालाँकि willMoveToParentViewController जल्द ही होता है और सही व्यवहार के लिए अनुमति देता है।

कैविएट: मैंने इसे केवल एक सामान्य यूनीवीगेशन कंट्रोलर पुश / पॉप के साथ परीक्षण किया है। अन्य स्थितियों में अतिरिक्त अप्रत्याशित व्यवहार हो सकता है।


4

तैयारफॉरसेग्यूग में: आपके पहले व्यूकंट्रोलर की विधि से आप उस शीर्षक को @ "" पर सेट करते हैं, इसलिए जब अगला दृश्य धकेल दिया जाता है तो यह पिछले व्यूकंट्रोलर शीर्षक को प्रदर्शित करेगा जो @ "" होगा।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

इसके साथ एकमात्र समस्या यह है कि जब आप पिछला बटन दबाते हैं तो आपके पिछले दृश्य का शीर्षक नहीं होगा, इसलिए आप इसे फिर से जोड़ सकते हैं

- (void)viewWillAppear:(BOOL)animated{
    self.navigationItem.title = @"First View Title";
}

मुझे यह समाधान बहुत पसंद नहीं है, लेकिन यह काम करता है और मुझे इसे करने का कोई अन्य तरीका नहीं मिला।



3

गैर जवाब से मुझे मदद मिली। लेकिन एक चाल चली - मैंने बस धक्का देने से पहले (जहां बैक बटन जा रहा है) व्यू कंट्रोलर का शीर्षक साफ कर दिया।

इसलिए जब पिछले दृश्य में कोई शीर्षक नहीं है, तो iOS 7 पर बैक बटन पर केवल एक तीर होगा, बिना पाठ के।

पर viewWillAppearजोर दे रहा देखने के, मैं मूल शीर्षक वापस रखा।


1
हम्म, यह ट्रिक काम करती है। हालांकि ऐसा लगता है कि शब्द कभी-कभी झिलमिला जाएंगे। बहुत अच्छा वर्कअराउंड नहीं लेकिन फिर भी एक अच्छा। +1
पैन ज़ियू

3
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

मुझे एक ही समस्या हो रही थी और मैंने इसे इस तरह किया।

--EDIT--

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

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

1
यह मेरे लिए काम करता है, हालांकि आप वापस मारते समय पाठ को संक्षेप में देख सकते हैं।
दिजीएट

3
@ डिजीट स्टेट के लिए भी यही जोड़ने की कोशिश UIControlStateHighlightedकरता है
कोडरपग

2
यह ठीक काम करता है, लेकिन यह भी अन्य सभी बटन "छुपाता है", न केवल बैक बटन ... इसे हल करने के लिए कोई विचार?
उर्कमान २ Ur

3

यह उपवर्ग का उपयोग कर रहा navigationControllerहै "बैक" को हटा देता है।

मैं इसे हटाने के लिए उपयोग कर रहा हूं, स्थायी रूप से ऐप के माध्यम से।

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

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

@end

3
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];

1
कृपया, अपने उत्तर में स्पष्टीकरण जोड़ें।
एलेक्स

1 नेविगेशन बार के समान रंग बनाएं 2 शीर्षक का निचोड़ न करने के लिए टेक्स्ट का आकार काफी छोटा करें
बिल Xie

मैंने आपके उत्तर की समीक्षा की, आपको हमेशा अपने उत्तर का समर्थन करना चाहिए।
एलेक्स

2

नेविगेशन बार का बैक बटन शीर्षक छुपाएं

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

2

यहां मैं वही कर रहा हूं, जो बैक बटन के शीर्षक को हटाने के लिए सरल है

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}

2

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

func navigationController(_ navigationController: UINavigationController, 
  willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                    action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }

1

आप इसका उपयोग भी कर सकते हैं:

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;

[temporaryBarButtonItem release];

यह मेरे लिए काम करता है


1
case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

1

विश्व स्तर पर सही समाधान

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    return true
}

सब से dumpest समाधान ... इसके भी अंतरिक्ष की तरह से पहले ... इसके सिर्फ पारदर्शी बन का उपयोग करें ...
लैस्ज़लो

यह ऐप के सभी UIBarButtonItems के टेक्स्ट को हटा देता है
मिकेल सांचेज़

1

मैं UINavigationControllerअपने ऐप में सभी नेविगेशन नियंत्रकों के लिए एक कस्टम वर्ग बनाता हूं और इसे लागू करता हूं। इस कस्टम UINavigationControllerवर्ग के अंदर मैं UINavigationBarप्रतिनिधि को selfएक बार दृश्य लोड करने के लिए सेट करता हूं ।

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

फिर मैं प्रतिनिधि पद्धति लागू करता हूं:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

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


1

बैक बटन नेविगेशन आइटम कार्यों के लिए बस एक ही जगह में प्रवेश !!


1
यह एक उत्तर की तुलना में टिप्पणी के रूप में अधिक उपयुक्त है।
अल लेलोपथ

1

अगर मेरी तरह आप इसके बजाय एक कस्टम दृश्य का उपयोग UINavigationBarकर रहे हैं और आप पीछे के बटन से चिपके हुए हैं तो आपको थोड़ा सा काम करना होगा जो थोड़ा सा अजीब लगता है।

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

ऐसा लगता है कि अगर इसे प्रस्तुत नहीं किया जाता है, तो कोई बात नहीं है कि यह एक शीर्षक दिखाने की कोशिश करेगा, इसका मतलब यह है कि यह दिखाया गया है फिर इसे छिपाने से पहले और समस्या को हल करता है।


1
extension UIViewController{
    func hideBackButton(){
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

1

मैंने सभी बैक बटन टाइटल्स को छिपाने के लिए एक बहुत ही सरल शून्य कॉन्फिगरेशन श्रेणी बनाई है जिसे आप यहां देख सकते हैं । इस सवाल का जवाब पहले ही स्वीकार कर लिया गया है, लेकिन दूसरों के लिए यह मददगार हो सकता है।

संपादित करें:

.h फ़ाइल

#import <UIKit/UIKit.h>

@interface UINavigationController (HideBackTitle)
extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);

@end

.m फ़ाइल

#import "UINavigationController+HideBackTitle.h"
#import <objc/runtime.h>


@implementation UINavigationController (HideBackTitle)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        PJSwizzleMethod([self class],
                    @selector(pushViewController:animated:),
                    @selector(pj_pushViewController:animated:));
    });
}

- (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *disappearingViewController =  self.viewControllers.lastObject;
    if (disappearingViewController) {
        disappearingViewController.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
    }
    if (!disappearingViewController) {
        return [self pj_pushViewController:viewController animated:animated];
    }
    return [self pj_pushViewController:viewController animated:animated];
}



@end

void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
{
    Method originalMethod = class_getInstanceMethod(cls, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);

    BOOL didAddMethod =
    class_addMethod(cls,
                originalSelector,
                method_getImplementation(swizzledMethod),
                method_getTypeEncoding(swizzledMethod));

    if (didAddMethod) {
        class_replaceMethod(cls,
                        swizzledSelector,
                        method_getImplementation(originalMethod),
                        method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.