বর্তমানভিউ নিয়ন্ত্রণকারী এবং নেভিগেশন বার প্রদর্শন করছে display


102

আমার কাছে একটি ভিউ কন্ট্রোলার শ্রেণিবিন্যাস রয়েছে এবং শীর্ষস্থানীয়তম নিয়ামকটি একটি মডেল হিসাবে প্রদর্শিত হয় এবং ব্যবহারের সময় কীভাবে নেভিগেশন বারটি প্রদর্শন করতে হয় তা জানতে চাই

'UIViewController:presentViewController:viewControllerToPresent:animated:completion'

'বর্তমানভিউ নিয়ন্ত্রণকারী: অ্যানিমেটেড: সমাপ্তি:' নোট:

'আইফোন এবং আইপড স্পর্শে উপস্থাপিত দৃশ্যটি সর্বদা পূর্ণ পর্দা থাকে। আইপ্যাডে, উপস্থাপনাটি মডেলপ্রেজেন্টেশন স্টাইল সম্পত্তিটির মানের উপর নির্ভর করে। '

'মোডালপ্রেজেন্টেশনস্টাইল' এর জন্য ডকস বলেছেন:

উপস্থাপনা শৈলী নির্ধারণ করে যে কীভাবে একটি উপস্থাপিত ভিউ কন্ট্রোলার অনস্ক্রিন প্রদর্শিত হবে। আইফোন এবং আইপড স্পর্শে, মডেল ভিউ কন্ট্রোলার সর্বদা পূর্ণ-স্ক্রিন উপস্থাপিত হয়, তবে আইপ্যাডে বিভিন্ন ধরণের উপস্থাপনা বিকল্প রয়েছে।

একবার ভিউ কন্ট্রোলটি প্রদর্শিত হয়ে যাওয়ার পরে নেভিগেশন বারটি স্থিতি বারের নীচে দৃশ্যমান কিনা তা নিশ্চিত করার কোনও উপায় আছে? আমি কী ডকটির ব্যাখ্যা করব, আপনি আইফোন / আইপড এবং কেবলমাত্র আইপ্যাডের কোনও বিকল্প পাবেন না?

পূর্বে, আমি ব্যবহার করছিলাম 'UIViewController:presentModalViewController:animated'যা ভাল কাজ করেছে, তবে আইওএস 5.0 থেকে, এপিআই হ্রাস করা হয়েছে তাই আমি নতুনটিতে স্যুইচ করছি।

দৃশ্যত, আমি যা করতে চাইছি তাতে পর্দার নীচে থেকে নতুন নিয়ামক স্লাইডটি আসছিল ঠিক যেমন পুরানো এপিআই করত।

[কোড সহ আপডেট করা]:

// My root level view:
UIViewController *vc = [[RootViewController alloc] 
                            initWithNibName:nil 
                            bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:vc];        
....

// Within the RootViewController, Second view controller is created and added 
// to the hierarchy. It is this view controller that is responsible for 
// displaying the DetailView:
SecondTierViewController *t2controller = [[SecondTierViewController alloc] 
                                           initWithNibName:nil
                                           bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:t2controller animated:YES];

// Created by SecondTierViewController 
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

[self.navigationController presentViewController:controller 
                                        animated:YES 
                                        completion:nil];

উত্তর:


194

এটি সত্য যে আপনি আইফোনে কোনও ভিউ কন্ট্রোলারকে মডেলভাবে উপস্থাপন করলে, আপনি এটি কোনও নেভিগেশন নিয়ামকের উপরের ভিউ নিয়ন্ত্রণকারী বা অন্য কোনও উপায়ে উপস্থাপন করুন তা বিবেচনা না করে সর্বদা পূর্ণ পর্দা উপস্থাপিত হবে। তবে আপনি সর্বদা নীচের কাজের মতো নেভিগেশন বারটি প্রদর্শন করতে পারেন:

এই দৃশ্য নিয়ন্ত্রণকারী উপস্থাপন করার পরিবর্তে Modally একটি নেভিগেশন কন্ট্রোলারটিকে তার রুট ভিউ নিয়ন্ত্রকের সাথে ভিউ কন্ট্রোলার হিসাবে পছন্দ হিসাবে সেট করতে চান:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc] initWithRootViewController:myViewController];

//now present this navigation controller modally 
[self presentViewController:navigationController
                   animated:YES
                   completion:^{

                        }];

আপনার দর্শনটি মড্যালি উপস্থাপন করা হলে আপনার নেভিগেশন বার দেখতে হবে see


এটি আমি যা শুরু করেছিলাম তা অনেকটাই। তবে আমি 'বর্তমানমডালভিউ কনট্রোলার' না ব্যবহার করার কারণটি হ'ল এটিকে একটি অবহেলিত এপিআই হিসাবে চিহ্নিত করা হয়েছে।
জোনাস গার্ডনার

এটি ইউআইভিউউকন্ট্রোলার শ্রেণিতে লেখা হয়েছে: // মডেল শিশু হিসাবে অন্য ভিউ কন্ট্রোলারটি প্রদর্শন করুন। যদি অ্যানিমেটেড থাকে তবে একটি উল্লম্ব শিট ট্রানজিশন ব্যবহার করে his এই পদ্ধতিটি বর্তমান ভিউকন্ট্রোলার দ্বারা প্রতিস্থাপন করা হয়েছে: অ্যানিমেটেড: সমাপ্তি: // এটি অগ্রাহ্য করা হবে, সেই অনুযায়ী পরিকল্পনা করুন। - (অকার্যকর) বর্তমানমডালভিউ কনট্রোলার: (ইউআইভিউকন্ট্রোলার *) মডেলভিউ কনট্রোলার অ্যানিমেটেড: (বিওএল) অ্যানিমেটেড; সুতরাং সহজেই নতুন পদ্ধতিটি কল করুন এবং সমাপ্তির জন্য শূন্য পাস করুন এবং আপনার ভাল হওয়া উচিত।
মণীশ আহুজা

দুর্দান্ত উত্তর। ব্যবহারের জন্য আপডেট হয়েছে(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
ওয়েন

4
আমি যখন নেভিগেশন নিয়ন্ত্রক উপস্থাপনের চেষ্টা করি তখন এটি ক্র্যাশ হয় ( 'NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported')। কিভাবে এই কাজ করতে পারেন?
oarfish

আমার ক্ষেত্রে এটি বারটি দেখায় তবে অন্যান্য সামগ্রীটি অ্যানিমেশন উপস্থাপনের ক্ষেত্রে ভুলভাবে স্থাপন করা হয়েছে। এবং কেবলমাত্র এই অ্যানিমেশনের পরে এটি সঠিক অবস্থানে যায়।
ভাইচাস্লাভ গের্চিকভ

48

Swift 5.*

নেভিগেশন:

guard let myVC = self.storyboard?.instantiateViewController(withIdentifier: "MyViewController") else { return }
let navController = UINavigationController(rootViewController: myVC)

self.navigationController?.present(navController, animated: true, completion: nil)

ফিরে যাচ্ছি:

self.dismiss(animated: true, completion: nil)

সুইফট ২.০

নেভিগেশন:

let myVC = self.storyboard?.instantiateViewControllerWithIdentifier("MyViewController");
let navController = UINavigationController(rootViewController: myVC!)

self.navigationController?.presentViewController(navController, animated: true, completion: nil)

ফিরে যাচ্ছি:

self.dismissViewControllerAnimated(true, completion: nil)

4
তবে আমি কীভাবে সেট করব যখন আমি আপনার কোডটি চেষ্টা করি তবে কেবলমাত্র নেভিগেশন বার সেট করুন তবে আমি এর সম্পত্তিটি বার টিন্টের রঙ, শিরোনাম ইত্যাদির মতো পরিবর্তন করতে পারি না
জয়দীপ

এই প্রশ্নের সাথে সম্পর্কিত নয় তবে আপনি উত্তরটি এখানে খুঁজে পেতে পারেন stackoverflow.com/questions/26008536/…
তাল জিয়ন

23

আপনি কি ব্যবহার করতে পারেন:

[self.navigationController pushViewController:controller animated:YES];

ফিরে যাওয়া (আমার মনে হয়):

[self.navigationController popToRootViewControllerAnimated:YES];

4
আপনাকে ধন্যবাদ, আপনার স্টোরিবোর্ডে ইতিমধ্যে কোনও নেভিগেশন কন্ট্রোলার ডিজাইন থাকলে এটি করার সর্বোত্তম উপায়। আপনি আমাকে অনেক সাহায্য করেছেন
ফিজালিস

ফিরে যাওয়া হ'ল [স্ব-নেভিগেশন কন্ট্রোলার পপভিউ কন্ট্রোলার অ্যানিমেটেড: হ্যাঁ]; পপটরোট - সমস্ত উপায়ে 1 ম ভিউকন্ট্রোলারের দিকে ফিরে
বোরিস গফুরভ

2

Ios7 এও আমার একই সমস্যা ছিল। আমি এটিকে নির্বাচক হিসাবে ডেকেছি এবং এটি ios7 এবং ios8 উভয় ক্ষেত্রেই কাজ করেছে।

[self performSelector: @selector(showMainView) withObject: nil afterDelay: 0.0];

- (void) showMainView {
    HomeViewController * homeview = [
        [HomeViewController alloc] initWithNibName: @
        "HomeViewController"
        bundle: nil];
    UINavigationController * navcont = [
        [UINavigationController alloc] initWithRootViewController: homeview];
    navcont.navigationBar.tintColor = [UIColor whiteColor];
    navcont.navigationBar.barTintColor = App_Theme_Color;
    [navcont.navigationBar
    setTitleTextAttributes: @ {
        NSForegroundColorAttributeName: [UIColor whiteColor]
    }];
    navcont.modalPresentationStyle = UIModalPresentationFullScreen;
    navcont.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.navigationController presentViewController: navcont animated: YES completion: ^ {

    }];
}

1

সমস্ত কাজ [self.navigationController pushViewController:controller animated:YES];হ'ল একটি রূপান্তর সঞ্চারিত করা, এবং এটিকে নেভিগেশন কন্ট্রোলার স্ট্যাক এবং অন্যান্য কিছু শীতল নেভিগেশন বার অ্যানিমেশন স্টাফগুলিতে যুক্ত করা। আপনি যদি বার অ্যানিমেশনটির বিষয়ে চিন্তা না করেন তবে এই কোডটি কাজ করা উচিত । নতুন কন্ট্রোলারে বারটি উপস্থিত হয় এবং আপনি একটি ইন্টারেক্টিভ পপ অঙ্গভঙ্গি পান!

//Make Controller
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                    bundle:[NSBundle mainBundle]];  
//Customize presentation
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

//Present controller
[self presentViewController:controller 
                   animated:YES 
                 completion:nil];
//Add to navigation Controller
[self navigationController].viewControllers = [[self navigationController].viewControllers arrayByAddingObject:controller];
//You can't just [[self navigationController].viewControllers addObject:controller] because viewControllers are for some reason not a mutable array.

সম্পাদনা: দুঃখিত, বর্তমান ভিউকন্ট্রোলার পূর্ণ পর্দা পূরণ করবে। আপনাকে সিজিএফাইন ট্রান্সফর্ম.ট্রান্সলেশন বা অন্য কোনও কিছু দিয়ে কাস্টম ট্রানজিশন করতে হবে, ট্রানজিশন দিয়ে নিয়ামককে অ্যানিমেট করতে হবে, তারপরে এটিকে নেভিগেশনকন্ট্রোলারের ভিউ কনট্রোলারগুলিতে যুক্ত করুন।


1

সুইফট 3

        let vc0 : ViewController1 = ViewController1()
        let vc2: NavigationController1 = NavigationController1(rootViewController: vc0)
        self.present(vc2, animated: true, completion: nil)

উপস্থাপিত ইউআইভিউউকন্ট্রোলারটিতে কীভাবে ফিরে বোতাম যুক্ত করবেন
জুলকরনাইন শাহ

1

সুইফ্ট সংস্করণ: এটি একটি ভিউকন্ট্রোলার উপস্থাপন করে যা একটি নেভিগেশন কন্ট্রোলারে এমবেড করা আছে।

    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    //  Identify the bundle by means of a class in that bundle.
    let storyboard = UIStoryboard(name: "Storyboard", bundle: NSBundle(forClass: SettingsViewController.self))

    // Instance of ViewController that is in the storyboard.
    let settingViewController = storyboard.instantiateViewControllerWithIdentifier("SettingsVC")

    let navController = UINavigationController(rootViewController: settingViewController)

    presentViewController(navController, animated: true, completion: nil)

}

1

আমি এই কোডটি ব্যবহার করি। এটি আইওএস 8 এ দুর্দান্ত কাজ করছে।

MyProfileEditViewController *myprofileEdit=[self.storyboard instantiateViewControllerWithIdentifier:@"myprofileeditSid"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myprofileEdit];
[self presentViewController:navigationController animated:YES completion:^{}];

0

একটি সমাধান

DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;



[self.navigationController presentViewController:navController 
                                        animated:YES 
                                        completion:nil];

0

আপনি যদি মডেলপ্রেজেন্টেশন স্টাইল সম্পত্তি সেট না করেন (ইউআইএমডালপ্রেজেন্টেশনফর্মশিটের মতো), নেভিগেশন বার সর্বদা প্রদর্শিত হবে। নিশ্চিত করার জন্য, সর্বদা করুন

[[self.navigationController topViewController] presentViewController:vieController 
                                                            animated:YES 
                                                          completion:nil];

এটি সর্বদা নেভিগেশন বারটি প্রদর্শন করবে।


হুঁ..পরেও 'শীর্ষভিউ নিয়ন্ত্রণকারী'-এর নির্দিষ্ট রেফারেন্স সহ, আমি এখনও একই আচরণ দেখছি। আমি মনে করি না যে আমি কোনও বিশেষ উপায়ে ন্যাভ স্ট্যাকের সাথে অন্যান্য ভিউ কন্ট্রোলারগুলি যুক্ত করছি।
জোনাস গার্ডনার

0

আপনি যদি সুইচ ২.x এ নেভিগেশনকন্ট্রোলার ব্যবহার করেন

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let targetViewController = storyboard.instantiateViewControllerWithIdentifier("targetViewControllerID") as? TargetViewController
self.navigationController?.pushViewController(targetViewController!, animated: true)

0

এটা চেষ্টা কর

     let transition: CATransition = CATransition()
    let timeFunc : CAMediaTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.duration = 1
    transition.timingFunction = timeFunc
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromRight
    self.view.window!.layer.addAnimation(transition, forKey: kCATransition)
    self.presentViewController(vc, animated:true, completion:nil)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.