ios - मोडल सेग, नेविगेशन बार गायब हो जाता है




objective-c xcode4.6 (7)

IOS 8 में एक बेहतर तरीका है। आप अनुकूली प्रस्तुति शैलियों का उपयोग कर सकते हैं:

  1. "वर्तमान के रूप में पॉपओवर" सेगमेंट का उपयोग करें
  2. UIPopoverPresentationControllerDelegate प्रोटोकॉल को अपनाने के लिए अपना नियंत्रक सेट करें
  3. 2 विधियों को लागू करें

उद्देश्य सी:

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationFullScreen;
}

- (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: controller.presentedViewController];
    return navController;
}

स्विफ्ट:

UIPopoverPresentationControllerDelegate
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.FullScreen
    }

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
    var navController = UINavigationController(rootViewController: controller.presentedViewController)
    return navController
}

स्विफ्ट 4:

extension MyViewController: UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.fullScreen
    }

    func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
        return UINavigationController(rootViewController: controller.presentedViewController)
    }
}

सेग विधि की तैयारी में प्रतिनिधि को सेट करें:

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if let adpostVC = segue.destinationViewController as? XXXController {
            let popPC = adpostVC.popoverPresentationController
            popPC?.delegate = self

मैं ऑब्जेक्ट-सी पर कोड करने के लिए Xcode 4.6.1 का उपयोग कर रहा हूं। मैं जानना चाहता हूं कि 2 व्यू कंट्रोलर के बीच एक मोडल सेगमेंट बनाते समय मैं नेविगेशन बार को कैसे दिखा सकता हूं, क्योंकि मैं स्टोरीबोर्ड में सेग कर रहा हूं और जब मैं एप्लिकेशन को दूसरे व्यू कंट्रोलर के नेविगेशन बार को चलाता हूं, और मेरे पास उस बार पर एक बटन है, लेकिन मैं उसे देख नहीं सकता।


आप निम्नलिखित में -(void)viewDidLoad करके प्रोग्राम टूलबार जोड़ सकते हैं

NSInteger tbHeight = 50;
tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - tbHeight), self.view.frame.size.width, tbHeight)];
tb.translucent = YES;
emailButton = [[UIBarButtonItem alloc] initWithTitle:@"Email Results" style:UIBarButtonItemStyleBordered target:tvController action:@selector(actionSheet:)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneButtonPressed:)];

NSArray *barButton  =   [[NSArray alloc] initWithObjects:emailButton,flexibleSpace,doneButton,nil];
[tb setItems:barButton];


[self.view addSubview:tb];

barButton = nil;

फिर आपको किए गए बटन को दबाने के लिए एक IBAction बनाना होगा और यह इस तरह से किया जाता है:

-(IBAction)doneButtonPressed:(id)sender {
    [self dismissModalViewControllerAnimated:YES];
}

आपको वह देना चाहिए जो आप अपने मोडल व्यू कंट्रोलर के साथ चाहते हैं।


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

सबसे पहले, एक NavVC में VC को एम्बेड करें। फिर आपको सीवी गंतव्य को नव कुलपति निर्धारित करने के लिए कोड लिखना होगा।

कोड इस तरह दिखता है:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UINavigationController *nav = segue.destinationViewController;
    AddTriviaVC *triv = [[AddTriviaVC alloc]init];
    triv = nav.viewControllers[0]; 
    triv.location = self.location; 
} 

मुझे लगता है कि इसका मतलब बनता है।


मोडल सेगमेंट पूरे स्क्रीन को संभालते हैं, इसलिए किसी भी नेविगेशन बार, टूल बार, या टैब बार जो वर्तमान नियंत्रक में हैं, को कवर किया जाएगा। यदि आप इस मोडल कंट्रोलर पर एक नेविगेशन बार चाहते हैं, तो आपको विशेष रूप से इसमें एक जोड़ने की आवश्यकता होगी, और उस नए नेविगेशन बार (या टूल बार) में कोई भी बटन जोड़ना होगा। यदि आप ऐसा नहीं करना चाहते हैं, तो इसे सामान्य रूप से पेश न करें, इसे करने के लिए एक धक्का दें।


यहाँ स्विफ्ट 4.2 में "वोलोडाइमिर नाज़र्केविच" का मेरा लघु संस्करण है

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    switch(segue.identifier ?? "") {

    case "segueIdentifier": // name of your segue
        let navigation: UINavigationController = segue.destination as! UINavigationController

        //here you create new name of your destination ViewController and assign his name to let constant above
        guard let myNewViewController = navigation.viewControllers[0] as? DestinationViewController
       //DestinationViewController is your 2-ViewController where you go to from first one.

       else {
            fatalError("Unexpected destination: \(segue.destination)")
        }
       // TO DO SOMETHING HERE

   default:
        fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
    }
}

"वलोडिमिर Nazarkevych" का कोड पूरी तरह से काम करता है, लेकिन केवल तब जब आपका सीग 1-व्यू-कॉन्ट्रोलर से 2-व्यू-कॉन्ट्रोलर के नेविगेशनकंट्रोलर से होता है, सीधे 2-व्यू-कॉन्ट्रोलर से नहीं। बहुत बहुत धन्यवाद!

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


स्टोरीबोर्ड में, आपको अपने नए व्यू कॉन्ट्रोलर में एक नेविगेशन आइटम जोड़ना चाहिए, फिर अपने किए गए बटन के लिए बार बटन आइटम जोड़ें


बस अपने मोडल व्यू Navigation Controller एक और Navigation Controller जोड़ें। उनके नक़्शे - कदम पर चलिए

  1. Modal View Controller चयन करें
  2. Editor menu जाएं
  3. पहले इनका चयन करें
  4. Navigation Controller चयन करें

एप्लिकेशन चलाएँ। अब इसे पूरी तरह से काम करना चाहिए।

आशा है इससे तुम्हारी समस्या का समाधान हो गया होगा।







xcode4.6