আমি নেভিগেশন স্ট্যাকের তৃতীয় দৃশ্যে প্রথম দর্শনে ফিরে যেতে চাই।
আমি জানি কীভাবে একবারে একটি ভিউ পপ করতে হয়:
[self.navigationController popViewControllerAnimated:YES];
তবে আমি কীভাবে একবারে দুটি করব?
আমি নেভিগেশন স্ট্যাকের তৃতীয় দৃশ্যে প্রথম দর্শনে ফিরে যেতে চাই।
আমি জানি কীভাবে একবারে একটি ভিউ পপ করতে হয়:
[self.navigationController popViewControllerAnimated:YES];
তবে আমি কীভাবে একবারে দুটি করব?
উত্তর:
আপনি এটিকে নেভিগেশন নিয়ামক স্ট্যাকের মধ্যেও লাফিয়ে দেখতে চেষ্টা করতে পারেন
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *aViewController in allViewControllers) {
if ([aViewController isKindOfClass:[RequiredViewController class]]) {
[self.navigationController popToViewController:aViewController animated:NO];
}
}
এখানে দুটি UINavigationController
এক্সটেনশন রয়েছে যা আপনার সমস্যার সমাধান করতে পারে। আমি প্রথমটি ব্যবহার করে সুপারিশ করব যা UIViewController
নির্দিষ্ট শ্রেণীর একটিতে পপ হয় :
extension UINavigationController {
func popToViewController(ofClass: AnyClass, animated: Bool = true) {
if let vc = viewControllers.filter({$0.isKind(of: ofClass)}).last {
popToViewController(vc, animated: animated)
}
}
func popViewControllers(viewsToPop: Int, animated: Bool = true) {
if viewControllers.count > viewsToPop {
let vc = viewControllers[viewControllers.count - viewsToPop - 1]
popToViewController(vc, animated: animated)
}
}
}
এবং এটি এর মতো ব্যবহার করুন:
// pop to SomeViewController class
navigationController?.popToViewController(ofClass: SomeViewController.self)
// pop 2 view controllers
navigationController?.popViewControllers(viewsToPop: 2)
removeLast
দিয়ে প্রতিস্থাপন করতে পারেন ঠিক removeLast(2)
।
let vc = viewControllers[viewControllers.count - viewsToPop + 1]
, সঠিকভাবে কাজ করার জন্য আপনাকে এটিকে প্রতিস্থাপন করতে হবে: let vc = viewControllers[viewControllers.count - (viewsToPop + 1)]
বাlet vc = viewControllers[viewControllers.count - viewsToPop - 1]
আপনি এর সাথে "রুট" (প্রথম) দেখার নিয়ামকটিতে পপ করতে পারেন popToRootViewControllerAnimated
:
[self.navigationController popToRootViewControllerAnimated:YES];
// If you want to know what view controllers were popd:
// NSArray *popdViewControllers = [self.navigationController popToRootViewControllerAnimated:YES];
UINavigationController
তথ্যসূত্র :
রুট ভিউ কন্ট্রোলার ব্যতীত স্ট্যাকের সমস্ত ভিউ কন্ট্রোলারকে পপ করে এবং ডিসপ্লে আপডেট করে।
প্রত্যাবর্তন মান
স্ট্যাক থেকে পপ করা হয়েছে এমন দর্শনীয় কন্ট্রোলারের একটি অ্যারে।
সুইফট 2 - এক্সকোড 7.3
ইউআইভিউউকন্ট্রোলারদের পপ করতে এটি খুব কার্যকর এক্সটেনশন হতে পারে:
extension UINavigationController {
func popToViewControllerOfType(classForCoder: AnyClass) {
for controller in viewControllers {
if controller.classForCoder == classForCoder {
popToViewController(controller, animated: true)
break
}
}
}
func popViewControllers(controllersToPop: Int, animated: Bool) {
if viewControllers.count > controllersToPop {
popToViewController(viewControllers[viewControllers.count - (controllersToPop + 1)], animated: animated)
} else {
print("Trying to pop \(controllersToPop) view controllers but navigation controller contains only \(viewControllers.count) controllers in stack")
}
}
}
যদি আপনি কেবল একবারে 2 পপ করতে চান কারণ আপনার রুটভিউ কনট্রোলারটি (গভীরভাবে) আরও গভীর হয় তবে 2 আপনি উদাহরণস্বরূপ ইউআইভিউ কনট্রোলারটিতে একটি বিভাগ যুক্ত করার বিষয়টি বিবেচনা করতে পারেন:
#import <UIKit/UIKit.h>
@interface UINavigationController (popTwice)
- (void) popTwoViewControllersAnimated:(BOOL)animated;
@end
#import "UINavigationController+popTwice.h"
@implementation UINavigationController (popTwice)
- (void) popTwoViewControllersAnimated:(BOOL)animated{
[self popViewControllerAnimated:NO];
[self popViewControllerAnimated:animated];
}
@end
#import "UINavigationController+popTwice.h"
আপনার বাস্তবায়নের কোথাও বিভাগটি আমদানি করুন এবং একবারে 2 টি নিয়ন্ত্রককে পপ করতে কোডের এই লাইনটি ব্যবহার করুন:
[self.navigationController popTwoViewControllersAnimated:YES];
এটা দুর্দান্ত না? :)
সুইফট 4:
func popViewControllerss(popViews: Int, animated: Bool = true) {
if self.navigationController!.viewControllers.count > popViews
{
let vc = self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - popViews - 1]
self.navigationController?.popToViewController(vc, animated: animated)
}
}
তারপরে এই পদ্ধতিটি ব্যবহার করুন
self.popViewControllerss(popViews: 2)
//viewIndex = 1;
//viewIndex = 2;
//viewIndex = 3;
// **[viewControllers objectAtIndex: *put here your viewindex number*]
NSArray *viewControllers = [self.navigationController viewControllers];
[self.navigationController popToViewController:[viewControllers objectAtIndex:viewIndex] animated:NO];
NSMutableArray *newStack = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
[newStack removeLastObject];
[newStack removeLastObject];
[self.navigationController setViewControllers:newStack animated:YES];
সুইফ্ট 3 এ , আপনি ন্যাভিগেশন কন্ট্রোলার থেকে এক, দুই বা ততোধিক ভিউ কনট্রোলার পপ করতে পারেন
let viewControllers = self.navigationController!.viewControllers as [UIViewController]
for aViewController:UIViewController in viewControllers {
if aViewController.isKind(of: FromWhereYouWantToGoController.self) {
_ = self.navigationController?.popToViewController(aViewController, animated: true)
}
}
এখানে থেকে ইউয়ারওয়ানটটোগোকন্ট্রোলারটি গন্তব্য নিয়ামক। আশা করি এটা সাহায্য করবে.
আমি এখানে এই উত্তরটি দেখতে পেলাম না। আপনি যদি কেবল কয়েকটি (মূলের সমস্ত উপায় নয়) পপ করতে চান তবে আপনি কেবল স্ব.নিভিশনকন্ট্রোলআরভিউ কনট্রোলারদের মাধ্যমে শ্রেণীর ধরণের জন্য যাচাই করতে পারেন, বা আপনার যদি কোনও রেফারেন্স ব্যবহার রয়েছে তবে:
for (UIViewController *aViewController in self.navigationController.viewControllers) {
if ([aViewController isKindOfClass:[SMThumbnailViewController class]]) {
[self.navigationController popToViewController:aViewController animated:YES];
}
}
এক্স ভিউ নিয়ন্ত্রণকারীদের ফিরে যেতে আমি এখানে একটি ছোট ফাংশন ব্যবহার করছি:
-(void)backMultiple:(id)data {
int back = 2; //Default to go back 2
int count = [self.navigationController.viewControllers count];
if(data[@"count"]) back = [data[@"count"] intValue];
//If we want to go back more than those that actually exist, just go to the root
if(back+1 > count) {
[self.navigationController popToRootViewControllerAnimated:YES];
}
//Otherwise go back X ViewControllers
else {
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:count-(back+1)] animated:YES];
}
}
দুই বা ততোধিক পপিংয়ের (সুইফট 1.2 / এক্সকোড 6.3.1) হিসাবে স্যুইফ্ট সংস্করণ
var viewControllers = self.navigationController?.viewControllers
viewControllers?.removeLast()
viewControllers?.removeLast()
self.navigationController?.setViewControllers(viewControllers, animated: true)
বা
var viewControllers = self.navigationController?.viewControllers
var viewsToPop = 2
var end = (viewControllers?.count)!
var start = end - viewsToPop
viewControllers?.removeRange(Range<Int>(start: start, end: end))
self.navigationController?.setViewControllers(viewControllers, animated: true)
আপনি ইউআইভিউউকন্ট্রোলারদের স্ট্যাক ব্যবহার করতে পারেন। 1. স্ট্যাকের সমস্ত ভিউকন্ট্রোলারের অ্যারে আনুন। 2. পুরো অ্যারের মাধ্যমে ইটারেট করুন এবং
শ্রেণীর ধরণের সাথে মিল রেখে কাঙ্ক্ষিত ভিউকন্ট্রোলারটি সন্ধান করুন । ৩. ভিউকন্ট্রোলারটি পপ করুন।
func popToSpecificViewC
{
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
for viewController:UIViewController in viewControllers
{
if viewController.isKind(of: WelcomeViewC.self)
{
_ = self.navigationController?.popToViewController(viewController, animated: true)
}
}
}
একটি সাধারণ ইউআইএনএভিগেশন কন্ট্রোলার এক্সটেনশন ব্যবহার করে :
extension UINavigationController {
func popViewControllers(_ count: Int) {
guard viewControllers.count > count else { return }
popToViewController(viewControllers[viewControllers.count - count - 1], animated: true)
}
}