UINavigationController में "बैक" बटन कैसे छिपाएं?


158

क्या आप जानते हैं कि UINavigationController में 'बैक' बटन को कैसे छिपाया जाता है? इसके अलावा, इसे वापस कैसे दिखाया जाए, लेकिन मुझे लगता है कि यह इसे छिपाने के समान है ...

जैसे आप ईमेल देखते समय 'एडिट' को हिट करते हैं, ठीक वैसे ही मेल एप्लीकेशन आईफोन पर करता है।

जवाबों:


313

मुझे सिर्फ एक नियंत्रक उपयोग में, इसका उत्तर मिला:

[self.navigationItem setHidesBackButton:YES animated:YES];

और इसे बहाल करने के लिए:

[self.navigationItem setHidesBackButton:NO animated:YES];

-

[अपडेट करें]

स्विफ्ट 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)

18
मेरी गलती से भी सीखें: आपको setHidesBackButton:BEFORE पर कॉल करना है, आप ने नेविगेशन को धकेल दिया है।
कोडिंगफ्रीड 1

इससे पहले क्यों? क्या होगा यदि आप एक व्यू-कंट्रोलर को पुश करना चाहते हैं और फिर उपयोगकर्ता को वापस जाने से रोकने के लिए बैक बटन छिपाएं?
user4951

1
@ कोडिंगफ्रीड - मुझे लगता है कि यह भी काम करता है अगर आप सेटहाइड्सबाकटन को व्यूडीडऐयर के संदेश हैंडलर में डालते हैं, तो आप बैकबटन को दिखाना नहीं चाहते हैं।
एन.एन.

2
इसके लिए सबसे अच्छी घटनाएं viewWillAppear:animatedछिपाना और viewWillDisappear:animatedइसे पुनर्स्थापित करना है।
पछार

अंत में कुछ Apple Apple Xcode में नहीं बदला है। 5 से अधिक वर्षों के बाद और यह जवाब अभी भी बहुत अच्छा काम करता है।
ऐप देव गाय

27

इस कोड को जोड़ें

[self.navigationItem setHidesBackButton:YES];

22

बैक बटन को हटाने के अलावा (पहले से सुझाई गई विधियों का उपयोग करके), उपयोगकर्ता यह न भूलें कि iOS 7 और बाद में बाएं से दाएं स्वाइप जेस्चर के साथ पिछली स्क्रीन पर 'पॉप' कर सकता है।

इसे अक्षम करने के लिए (जब उपयुक्त हो), निम्नलिखित को लागू करें (उदाहरण के लिए व्यूडलड में):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;

1
इस नोट को जोड़ने के लिए आप के लिए मैट - +1। बहुत उपयोगी। जो कोई भी सोच रहा है कि पॉप इशारा कैसे काम करता है, बस अपने नेविगेशन बार पर बाईं से दाईं ओर स्वाइप करें कि यहां मैट क्या वर्णन कर रहा है। उपरोक्त कोड को जोड़ने से उपयोगकर्ता को दृश्य नियंत्रक पर ऐसा करने से रोकता है जहां यह शामिल है।
noobzilla

18

बस मौजूदा उत्तरों को स्पष्ट करने के लिए: hidesBackButtonसंपत्ति सही उत्तर है, लेकिन यह कई उत्तरों में स्पष्ट नहीं है कि क्या selfसंदर्भित करता है। मूल रूप से आपको self.navigationItem.hidesBackButton = YESउस व्यू कंट्रोलर में सेट करना चाहिए जो पुश करने के लिए है (या बस पुश किया गया है) UINavigationController

दूसरे शब्दों में, कहें कि मेरा एक UINavigationControllerनाम है myNavController। मैं इस पर एक नया दृष्टिकोण रखना चाहता हूं, और जब मैं करता हूं तो मैं नहीं चाहता कि बैक बटन अब दिखाई दे। मैं ऐसा कुछ कर सकता था:

UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];

जब कोड समाप्त हो जाता है, तो उसके द्वारा नियंत्रित किया गया दृश्य newVCअब दिखना चाहिए, और कोई बैक बटन दिखाई नहीं देना चाहिए।


बिल्कुल वैसा ही जैसा मुझे सबसे पहले नेवीगेशन कंट्रोलर.नवीगेशन इटेम को करना था। धन्यवाद मैट।
Chucky

16

सशर्त रूप से बैक बटन को छिपाने और दिखाने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं:

-(void)viewDidAppear:(BOOL)animated
{
    if ([tempAry count]==0)
    {
        [self.navigationItem setHidesBackButton:YES animated:YES];
    }
    else
    {
        [self.navigationItem setHidesBackButton:NO animated:YES];
    }
    [super viewDidAppear:animated];
} 

नोट: कुछ मामलों में, आपको इसे देखने के बजाय viewDidAppear मेथड में लगाना होगा। ऐसे मामलों को देखें: जब आप अगली कक्षा की सरणी को पिछली कक्षा में अपडेट कर रहे हों और फिर ऊपर की तरह अगली कक्षा में स्थिति की जाँच करें।


11

स्विफ्ट आईओएस (मैंने निम्नलिखित उपयोग किया है)

// hide back button
        self.navigationItem.setHidesBackButton(true, animated: false)

// pgrm mark ----- ------

    // hide the back button for this view controller

    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)

        self.navigationItem.setHidesBackButton(editing, animated: animated)

    }// end setEditing

10

sethidesbackbutton ने किसी कारण से मेरे लिए काम नहीं किया

मैंने इस तरह से इस्तेमाल किया ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;

धन्यवाद .. मैं एक ही मुद्दा था जहां setHidesBackButton: हाँ नहीं काम किया। लेकिन यह समाधान iOS 7 के लिए काम करता है
mohsinj

7

हमेशा साधारण मुद्दों के लिए Apple प्रलेखन का उपयोग करें वे अधिक सरल और हल्के हैं :)

यहाँ स्विफ्ट 3.0 के लिए वाक्य रचना है:

self.navigationItem.setHidesBackButton(true, animated:true)

संदर्भ

https://developer.apple.com/reference/uikit/uinavigationitem#//apple_ref/occ/instm/UINavigationItem/setHidesBackButton:animated:


हटाना ; स्विफ्ट में :)
मार्कस राउतोपुरो 10

6

मेरे मामले में मेरे पास वर्तमान उत्तरों के साथ कुछ समस्याएँ थीं:

  • अंदर देखेंDidLoad / viewWillAppear केवल बैक आइकन छिपा हुआ था और स्ट्रिंग "बैक" निष्क्रिय था लेकिन फिर भी दिखाई दे रहा था
  • अंदर viewDidAppear पीछे का बटन गायब हो गया ... लेकिन मैं नहीं चाहता था कि उपयोगकर्ता इसे बिल्कुल भी देखे

तो समाधान है कि आखिरकार मेरे लिए काम किया है:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {
        [self.navigationItem setHidesBackButton:YES animated:NO];
    }

    return self;
}

3

ज़ोरान सिमिक द्वारा समाधान का सुझाव मेरे लिए किसी कारण से काम नहीं आया।

इस कोड ने हालांकि काम किया:

MyController* controller   =   [[MyController alloc]  init];
NSArray* array             =   [[[NSArray alloc] initWithObjects:controller, nil] autorelease];

[self.navigationController setViewControllers:array animated:NO];

[controller release];

जाहिर है कि आपको अपने काम के लिए अपने स्वाद के लिए NSArray में हेरफेर करना होगा। आशा है कि किसी की मदद करता है :)


इसके लिए धन्यवाद! मैं एक अजीब बग लड़ रहा था और यह चाल चली। सभी के लिए नहीं, बल्कि सही मामलों में उपयोगी है।
ब्रैंडन

1

मेरे UIViewController उपवर्ग में मेरे पास यह विधि है:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated: animated];

    // hide back button in edit mode
    [self.navigationItem setHidesBackButton:editing animated:YES];
}

0

यह पीछे के बटन को छुपाता है और इसे स्विफ्ट में ऐड बटन से बदल देता है:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    // This hides the back button while in editing mode, which makes room for an add item button
    self.navigationItem.setHidesBackButton(editing, animated: animated)

    if editing {
        // This adds the add item button
        let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
        // Use the animated setter for the left button so that add button fades in while the back button fades out
        self.navigationItem.setLeftBarButton(addButton, animated: animated)
        self.enableBackGesture(enabled: false)
    } else {
        // This removes the add item button
        self.navigationItem.setLeftBarButton(nil, animated: animated)
        self.enableBackGesture(enabled: true)
    }
}

func enableBackGesture(enabled: Bool) {
    // In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
    if let navigationController = self.navigationController {
        if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
            interactivePopGestureRecognizer.isEnabled = enabled
        }
    }
}

0

स्विफ्ट 3।

आम तौर पर, आपको इस पृष्ठ पर पहले ही वर्णित कई बार Apple के प्रति-व्यू-कंट्रोलर एपीआई का उपयोग करना चाहिए, लेकिन कभी-कभी आपको बैक बटन के तत्काल नियंत्रण की आवश्यकता होती है।

निम्न कोड पिछला बटन छुपाता है और यह सुनिश्चित करता है कि छिपे हुए बटन क्षेत्र में टैप टक्कर का पता न लगे।

let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)

0

यह बैक बटन को छुपाता है

let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)


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