আইফোন ভিউ উইল অ্যাপয়ার গুলি চালাচ্ছে না


116

viewWillAppearআপনি যখন ঠিক নিজের ভিউ হায়ারার্কি তৈরি করবেন না তখন যাদের সমস্যা রয়েছে সে সম্পর্কে আমি অসংখ্য পোস্ট পড়েছি । আমার সমস্যা হ'ল আমি এর অর্থ কী তা বুঝতে পারি না।

যদি আমি একটি নিয়ন্ত্রণ তৈরি করি RootViewControllerএবং addSubViewসেই নিয়ামককে কল করি, তবে আমি আশা করব যে viewWillAppearইভেন্টগুলি যুক্ত করার জন্য যুক্ত করা ভিউগুলি গুলি তৈরি হবে ।

কারও কাছে কি এমন জটিল প্রোগ্রাম্যাটিক ভিউ হায়ারার্কির উদাহরণ রয়েছে যা viewWillAppearপ্রতিটি স্তরে সাফল্যের সাথে ইভেন্টগুলি গ্রহণ করে?

অ্যাপলের ডক্স স্টেট:

সতর্কতা: যদি কোনও ভিউ কন্ট্রোলারের অন্তর্ভুক্ত ভিউটি সরাসরি একটি ভিউ হায়ারার্কিতে যুক্ত করা হয় তবে ভিউ কন্ট্রোলার এই বার্তাটি গ্রহণ করবে না। আপনি যদি ভিউ হায়ারার্কিতে একটি ভিউ inোকান বা যোগ করেন এবং এতে একটি ভিউ কন্ট্রোলার থাকে তবে আপনার অবশ্যই সম্পর্কিত ভিউ কন্ট্রোলারকে এই বার্তাটি সরাসরি প্রেরণ করা উচিত। এই বার্তাটি ভিউ কন্ট্রোলার প্রেরণে ব্যর্থতা কোনও সংযুক্ত অ্যানিমেশন প্রদর্শিত হতে বাধা দেবে।

সমস্যাটি হ'ল তারা কীভাবে এটি করবেন তা বর্ণনা করে না। "সরাসরি" অর্থ কী? আপনি কীভাবে "পরোক্ষভাবে" একটি ভিউ যুক্ত করবেন?

আমি কোকো এবং আইফোনে মোটামুটি নতুন তাই অ্যাপল থেকে মৌলিক হ্যালো ওয়ার্ল্ড ক্রেপ ছাড়াও দরকারী উদাহরণ থাকলে ভাল লাগবে।


যতক্ষণ না বুঝতে পেরেছি আমি সাধারণভাবে ইউআইভিউউকন্ট্রোলার সাবক্লাসগুলির উদ্দেশ্য ব্যবহারটি ভুল বুঝতে পেরেছিলাম সে পর্যন্ত আমার এই সমস্যা ছিল। এই প্রশ্নটি দেখুন। stackoverflow.com/questions/5691226/...
averydev

7
দয়া করে সাবধান !!! আইওএস 5 এ আর সত্য নয় !!! কল দেখার জন্য উইল অ্যাপ্লিকেশন এবং দেখুনডিপ এয়ারটি স্বয়ংক্রিয়ভাবে
ভিলম কুর্জ

উত্তর:


55

আপনি যদি কোনও নেভিগেশন নিয়ামক ব্যবহার করেন এবং এর প্রতিনিধি সেট করেন, তবে {উইল, ডিড} {উপস্থিত হবে, অদৃশ্য হওয়া} পদ্ধতিগুলি দর্শন করা হবে না।

পরিবর্তে আপনাকে নেভিগেশন নিয়ন্ত্রক প্রতিনিধি পদ্ধতিগুলি ব্যবহার করতে হবে:

navigationController:willShowViewController:animated:
navigationController:didShowViewController:animated:

2
আমি আমার নেভিগেশন নিয়ন্ত্রকের প্রতিনিধি সেট করি নি এবং এখনও পদ্ধতিটি কল করা হচ্ছে না। যাইহোক, আমি এটি সেট করেছি এবং তারপরে আপনি উপরে উল্লিখিত পদ্ধতিগুলি ব্যবহার করেছি। ধন্যবাদ।
দিমিত্রিস


7
আমি এটি আইওএস 4 এবং আইওএস 5-তে পরীক্ষা করেছি: এটি সত্য নয়: একটি নেভিগেশনরন্ট্রোলারের প্রতিনিধি নির্ধারণ এবং তারপরে একটি দৃশ্যের দিকে এগিয়ে যাওয়া আগুনের দৃশ্যটি উইল অ্যাপিয়ার: ইত্যাদি
ডাগ্যামস

সুইফট 3: func navigationController (: _ navigationController: UINavigationController, willShow viewController: UIViewController, অ্যানিমেটেড: bool) {} এবং navigationController func (: _ navigationController: UINavigationController, didShow viewController: UIViewController, অ্যানিমেটেড: bool) {}
Naloiko ইউজিন

28

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

[myViewController viewWillAppear:NO];

মেট্রোনম উদাহরণে রুটভিউকন্ট্রোলআরএমে দেখুন।

(আমি আসলে অ্যাপলের উদাহরণস্বরূপ প্রকল্পগুলি দুর্দান্ত দেখতে পেয়েছি Hello হ্যালোওয়ার্ল্ডের চেয়ে অনেক বেশি আছে;)


3
প্রকৃতপক্ষে, আপনি সাবউভিউতে যুক্ত করার পরে আপনার ভিউউইল অ্যাপয়ার কল করা উচিত। অন্যথায়, আইবিআউটলেটস / আইবিএ ক্রিয়াকলাপগুলি শেষ হবে না।
চতুর্থ স্পেস

2
হ্যাঁ, পরে এক্সআইবি থেকে সাবভিউ তৈরি করা হয়েছে, ভিউউইল অ্যাপয়ার কল করা হয়নি। এটিকে আমার দ্বারা কল করুন এবং সবকিছু ঠিকঠাক কাজ করে।
জেএম

ধন্যবাদ! এটা ঠিক আমার জন্য ছিল। আমি নিজে এর মাধ্যমে একটি subview যোগ করা হয়েছিল [scrollView addSubview:controller.view];। আমি লাইন [controller viewWillAppear:NO];পরে যুক্ত এবং ভয়েলা! কবজির মতো কাজ করেছেন।
রব এস।

সমস্ত সম্ভাবনার ক্ষেত্রে, এটি আপনার ইউআইভিউকন্ট্রোলার এমন একটি দৃশ্যের নিয়ন্ত্রণ করে যা অন্য ইউআইভিউকন্ট্রোলার দ্বারা নিয়ন্ত্রিত একটি দৃশ্যের একটি সংক্ষিপ্তসার। এটি উদ্দেশ্য নকশা প্যাটার্ন নয়। আরও ব্যাখ্যার জন্য এই পোস্টটি দেখুন। stackoverflow.com/questions/5691226/...
averydev

6
দয়া করে সাবধান !!! আইওএস 5 এ আর সত্য নয় !!! দেখার জন্য কল করুন উইল অ্যাপ্লায়ার এবং স্বয়ংক্রিয়ভাবে ভিডডিয়ায়ার। আপনি যদি এটি ম্যানুয়ালি বলে থাকেন তবে এটি দুটিবার কল করা হবে।
ভিলিম কুর্জ

18

অবশেষে আমি এই কাজের জন্য একটি সমাধান পেয়েছি!

UINavigationControllerDelegate

আমি মনে করি এর সংক্ষিপ্তসারটি হল এটিতে থাকা ভিউকন্ট্রোলারের কাছে আপনার এনএভি কন্ট্রোলের প্রতিনিধি সেট করা UINavigationControllerDelegateএবং এটি প্রয়োগ এবং এটি দুটি পদ্ধতি। উজ্জ্বল! আমি খুব উত্তেজিত আমি অবশেষে একটি সমাধান খুঁজে পেয়েছি!


কীভাবে নেভিগেশনকন্ট্রোলারের প্রতিনিধি হিসাবে একটি রুটভিউ কনট্রোলারকে নিয়োগ করবেন?
গারগো

1
এটা কাজ করে না! অ্যাপটি ছোট করে দেখুন এবং এটি সর্বাধিক করুন
ভাইচাস্লাভ গের্চিকভ

8

আমি ঠিক একই সমস্যা ছিল। আমার অ্যাপ্লিকেশনটিতে আমার কাছে ২ টি নেভিগেশন কন্ট্রোলার রয়েছে এবং তাদের প্রত্যেকের একই দৃষ্টিভঙ্গি নিয়ামককে চাপ দেওয়া অন্য ক্ষেত্রে নয় একটি ক্ষেত্রে কাজ করেছে। আমি বলতে চাচ্ছি যে, যখন প্রথম সঠিক একই দৃশ্য নিয়ামক ঠেলাঠেলি UINavigationController, viewWillAppearবলা হত কিন্তু যখন দ্বিতীয় গৌণ নিয়ামক মধ্যে ধাক্কা।

তারপরে আমি এই পোস্টটি জুড়ে এসে পৌঁছালাম ইউআইএনএভিগেশন কন্ট্রোলারকে ভিউ উইল অ্যাপয়ার / ভিউ উইলডিস্পায়ার পদ্ধতিগুলি কল করা উচিত

এবং বুঝতে পেরেছি যে আমার দ্বিতীয় নেভিগেশন নিয়ামক নতুন সংজ্ঞা দিয়েছেন viewWillAppear। কোডটি স্ক্রিন করে দেখানো হয়েছিল যে আমি কল করছি না

[super viewWillAppear:animated];

আমি এটি যুক্ত এবং এটি কাজ!

নথি বলছে:

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


এখানে একই জিনিস। সুপার না বলে গণ্ডগোল
অলিভরেস এফ

5

আমি একটি নেভিগেশন নিয়ামক ব্যবহার করা হয়েছে। যখন আমি হয় হয় অন্য স্তরের ডেটাতে অবতরণ করতে বা আমার কাস্টম ভিউটি দেখাতে চাইলে আমি নিম্নলিখিতটি ব্যবহার করি:

[self.navigationController pushViewController:<view> animated:<BOOL>];

আমি যখন এটি করি, তখন আমি viewWillAppearফাংশনটি আগুনে ফেলার চেষ্টা করি। আমি মনে করি এটি "অপ্রত্যক্ষ" হিসাবে যোগ্যতা অর্জন করেছে কারণ আমি আসল addSubViewপদ্ধতিটি নিজেই কল করছি না । আমি জানি না এটি আপনার অ্যাপ্লিকেশনটিতে 100% প্রযোজ্য কিনা আপনি যেহেতু আপনি কোনও নেভিগেশন নিয়ামক ব্যবহার করছেন কিনা তা আমি বলতে পারি না তবে সম্ভবত এটি কোনও ক্লু সরবরাহ করবে।


5

ধন্যবাদ আইওএস 13।

ViewWillDisappear, ViewDidDisappear, ViewWillAppearএবং ViewDidAppearযা একটি নতুন মোডাল উপস্থাপনা যে সমগ্র পর্দা কাভার করে না ব্যবহার আইওএস 13 একটি উপস্থাপনা দৃশ্য নিয়ামক আহ্বান হবে না।

ক্রেডিটগুলি আরেক হলোকোতে যাচ্ছে । সে সত্যিই আমার দিনকে বাঁচিয়েছে।

এখানে চিত্র বর্ণনা লিখুন


4

প্রথমত, ট্যাব বারটি মূল স্তরে হওয়া উচিত, যেমন উইন্ডোতে যুক্ত করা উচিত, যেমন অ্যাপল নথির বিবরণে বলা হয়েছে। এটি সঠিক আচরণের মূল বিষয়।

দ্বিতীয়ত, আপনি ম্যানুয়ালি বিজ্ঞপ্তিগুলি ফরওয়ার্ড করতে / ব্যবহার করতে পারেন , তবে আমি দেখতে পেয়েছি যে সঠিকভাবে কাজ করার জন্য ভিউ কলগুলির সম্পূর্ণ শ্রেণিবিন্যাস পেতে, আমাকে যা করতে হয়েছিল তা নিজেই কল করতে হয়েছিলUITabBarDelegateUINavigationBarDelegate

[tabBarController viewWillAppear:NO];
[tabBarController viewDidAppear:NO];

এবং

[navBarController viewWillAppear:NO];
[navBarController viewDidAppear:NO];

.. কেবলমাত্র সংশ্লিষ্ট নিয়ন্ত্রকের উপর ভিউ কন্ট্রোলার স্থাপনের আগে (বরাদ্দের ঠিক পরে)। তারপরে, এটিকে সঠিকভাবে তার চাইল্ড ভিউ কন্ট্রোলারগুলিতে এই পদ্ধতিগুলি বলা হয়েছিল।

আমার শ্রেণিবিন্যাস এরকম:

window
    UITabBarController (subclass of)
        UIViewController (subclass of) // <-- manually calls [navController viewWill/DidAppear
            UINavigationController (subclass of)
                UIViewController (subclass of) // <-- still receives viewWill/Did..etc all the way down from a tab switch at the top of the chain without needing to use ANY delegate methods

কেবলমাত্র ট্যাব / এনএভি নিয়ন্ত্রকের উপরে উল্লিখিত পদ্ধতিগুলি কল করেই সমস্ত ইভেন্টগুলি সঠিকভাবে প্রেরণ করা হয়েছে তা নিশ্চিত করে। এটি আমাকে UINavigationBarDelegate/ UITabBarControllerDelegateপদ্ধতিগুলি থেকে ম্যানুয়ালি কল করার প্রয়োজনে আমাকে থামিয়ে দিয়েছে ।

সিডিনোট: কৌতূহলজনকভাবে, যখন এটি কাজ করে না, ব্যক্তিগত পদ্ধতি

- (void)transitionFromViewController:(UIViewController*)aFromViewController toViewController:(UIViewController*)aToViewController 

.. যা আপনি একটি কার্যকরী বাস্তবায়নের কলস্ট্যাক থেকে দেখতে পাচ্ছেন, সাধারণত viewWill/Did..পদ্ধতিগুলিতে কল করেন তবে আমি উপরের সম্পাদনা না করা পর্যন্ত না (যদিও এটি বলা হয়েছিল)।

আমি মনে করি এটি UITabBarControllerউইন্ডো স্তরে থাকা খুব গুরুত্বপূর্ণ বিষয় এবং নথিগুলি এটির ব্যাক আপ বলে মনে হচ্ছে।

আশা করি তা স্পষ্ট ছিল (ইস), আরও প্রশ্নের উত্তর দিতে পেরে খুশি।


3

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

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

    [subNavCntlr viewWillAppear:animated];
}

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

    [subNavCntlr viewWillDisappear:animated];
}

শুধু উদাহরণটি সম্পূর্ণ করতে। এই কোডটি আমার ভিউকন্ট্রোলারে প্রদর্শিত হবে যেখানে আমি নেভিগেশন নিয়ন্ত্রককে এমন দৃশ্যে যুক্ত করেছি যা আমি দৃশ্যে রেখেছি।

- (void)viewDidLoad {

    // This is the root View Controller
    rootTable *rootTableController = [[rootTable alloc]
                 initWithStyle:UITableViewStyleGrouped];

    subNavCntlr = [[UINavigationController alloc]   
                  initWithRootViewController:rootTableController];

    [rootTableController release];

    subNavCntlr.view.frame = subNavContainer.bounds;

    [subNavContainer addSubview:subNavCntlr.view];

    [super viewDidLoad];
}

.হ। দেখে মনে হচ্ছে

@interface navTestViewController : UIViewController <UINavigationControllerDelegate> {
    IBOutlet UIView *subNavContainer;
    UINavigationController *subNavCntlr;
}

@end

নিব ফাইলে আমার ভিউ রয়েছে এবং এই ভিউয়ের নীচে আমার কাছে একটি লেবেল রয়েছে একটি চিত্র এবং ধারক (অন্য দেখুন) যেখানে আমি কন্ট্রোলারটি রেখেছি Here এখানে এটি কীভাবে দেখায় তা এখানে। এটি কিছু ক্লায়েন্টের জন্য কাজ করায় আমাকে কিছু জিনিস ছাঁটাই করতে হয়েছিল।

বিকল্প পাঠ


3

কল করে ভিউগুলি "সরাসরি" যুক্ত করা হয় [view addSubview:subview] । ট্যাব বার বা ন্যাভি বারগুলি যেমন সাবউভিউগুলি অদলবদলের মতো পদ্ধতি দ্বারা ভিউগুলিকে "অপ্রত্যক্ষভাবে" যুক্ত করা হয়।

যে কোনও সময় আপনি কল করুন [view addSubview:subviewController.view], তারপরে আপনার কল করা উচিত [subviewController viewWillAppear:NO](বা হ্যাঁ আপনার ক্ষেত্রে যেমন হতে পারে)।

যখন আমি গেমের সাবস্ক্রিনের জন্য আমার নিজস্ব কাস্টম রুট-ভিউ ম্যানেজমেন্ট সিস্টেমটি প্রয়োগ করি তখন আমার এই সমস্যা হয়েছিল। দেখার জন্য কলটি ম্যানুয়ালি যোগ করে উইলঅ্যাপিয়ারটি আমার সমস্যা নিরাময় করেছে।


3

এটি করার সঠিক উপায়টি হ'ল ইউআইভিউউকন্ট্রোলার কনটেইনমেন্ট এপিআই।

- (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     UIViewController *viewController = ...;
     [self addChildViewController:viewController];
     [self.view addSubview:viewController.view];
     [viewController didMoveToParentViewController:self];
}

এটি একেবারে সঠিক আধুনিক সমাধান (আইওএস 9,8,7)। এছাড়াও, আপনি যদি উড়ে এম্বেড ভিউ কন্ট্রোলার পরিবর্তন করে থাকেন তবে আপনাকে কল করতে হবে [ভিউকন্ট্রোলার উইলমোভটোপ্যারেন্টভিউ কনট্রোলার: নীল]; [ভিউকন্ট্রোলআর.ভিউ সরানফ্রেমস্পারভিউ]; [ভিউকন্ট্রোলার সরানফ্র্যাম্পেন্টভিউকন্ট্রোলার];
এলি বার্ক

1
এই ক্ষেত্রে viewWillAppear:এখনও বলা যাবে না
ব্যাসাচলভ গের্চিকভ

2

আমি এই কোডটি পুশ এবং পপ ভিউ নিয়ন্ত্রকদের জন্য ব্যবহার করি:

ধাক্কা:

[self.navigationController pushViewController:detaiViewController animated:YES];
[detailNewsViewController viewWillAppear:YES];

পপ:

[[self.navigationController popViewControllerAnimated:YES] viewWillAppear:YES];

.. এবং এটা আমার জন্য ভাল কাজ করে।


2

একটি খুব সাধারণ ভুল নিম্নরূপ। আপনার একটি দৃষ্টিভঙ্গি রয়েছে, UIView* aএবং অন্য একটি UIView* b,। আপনি একটি সংক্ষিপ্তসার হিসাবে খ যোগ। যদি আপনি বি-তে ভিউউইল অ্যাপয়ার কল করার চেষ্টা করেন, এটি কখনই বরখাস্ত করা হবে না, কারণ এটি একটি এর একটি সংক্ষিপ্তসার


2

আইওএস 13 এখানে বাট আমার অ্যাপ্লিকেশন। আপনি যদি আইওএস 13 এর মতো আচরণের পরিবর্তনটি লক্ষ্য করেছেন তবে এটি ধাক্কা দেওয়ার আগে নিম্নলিখিতটি সেট করুন:

yourVC.modalPresentationStyle = UIModalPresentationFullScreen;

আপনার এটিকে আপনার স্টোরবোর্ডে অ্যাট্রিবিউটস ইন্সপেক্টর (উপস্থাপনাটি পুরো স্ক্রিনে সেট করুন) এ সেট করতেও হতে পারে।

এটি আপনার অ্যাপ্লিকেশনটিকে iOS এর পূর্ববর্তী সংস্করণগুলির মতো আচরণ করবে make


1

আমি এতে 100% নিশ্চিত নই, তবে আমি মনে করি ভিউ হায়ারার্কিতে ভিউ যুক্ত করার অর্থ নেভিগেশন কন্ট্রোলারের স্ট্যাকের উপরে একটি নতুন ভিউ কন্ট্রোলারকে চাপ দেওয়ার পরিবর্তে -addSubview:ভিউ কন্ট্রোলারের ভিউ (উদাহরণস্বরূপ [viewController.view addSubview:anotherViewController.view]) ডাকে ।


1

আমি মনে করি যে একটি সংক্ষিপ্তসার যুক্ত করার অর্থ এই নয় যে ভিউটি উপস্থিত হবে, সুতরাং শ্রেণীর পদ্ধতিতে কোনও স্বয়ংক্রিয় কল নেই যা এটি করবে


1

আমি মনে করি যে তারা "সরাসরি" অর্থ কীভাবে xcode "ন্যাভিগেশন অ্যাপ্লিকেশন" টেমপ্লেটটি ঠিক তেমনভাবে হুক করে বোঝায় যা ইউআইএনএভিগেশন কন্ট্রোলারটিকে অ্যাপ্লিকেশনটির ইউআইওয়াইন্ডোর একমাত্র উপদর্শন হিসাবে সেট করে।

এই টেমপ্লেটটি ব্যবহার করা হ'ল আমি ইউআইএনএভিগেশন কন্ট্রোলারের সেই নিয়ন্ত্রকদের পুশ / পপ করার পরে অবজেক্ট ভিউকন্ট্রোলারগুলিতে কল করা / করা / উপস্থিত / নিখোঁজ পদ্ধতিগুলি অর্জন করতে সক্ষম হয়েছি। এখানে উত্তরের অন্যান্য সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করেনি, সেগুলি রুটকন্ট্রোলারে প্রয়োগ করে এবং সেগুলি (শিশু) নেভিগেশনকন্ট্রোলারের কাছে পৌঁছে দেওয়া সহ। এই ফাংশনগুলি (হবে / করলো / উপস্থিত হবে / অদৃশ্য হয়ে যাবে) কেবলমাত্র আমার রুটকন্ট্রোলারে কেবলমাত্র শীর্ষ-স্তরের ভিসিগুলি, আমার "লগইন" এবং নেভিগেশনভিসিগুলি দেখানোর / নেভিগেশন নিয়ন্ত্রকের উপ-ভিসিগুলিকে না দেখানোর পরে ডাকা হয়েছিল, সুতরাং আমার কোনও সুযোগ ছিল না নাভ ভিসিতে "তাদের মাধ্যমে পাস করুন"।

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

এছাড়াও আজ কয়েক ঘন্টা ধরে এই সমস্যার বিরুদ্ধে মাথা ঠাট্টা করার পরে এটি কাজ করা নীতিগত বিষয় a একটি কাস্টম রুটকন্ট্রোলার এবং শিশু নেভিগেশন ভিসি ব্যবহার করে যে কোনও ওয়ার্কিং কোড স্নিপেটগুলি প্রশংসিত হবে।


1

যদি এই কাউকে সাহায্য করে। আমার একই ধরণের সমস্যা হয়েছিল যেখানে আমার ViewWillAppearউপর গুলি চালানো হচ্ছে না UITableViewController। চারপাশে অনেক খেলার পরে, আমি বুঝতে পারি যে সমস্যাটি হ'ল যেটি UINavigationControllerআমার নিয়ন্ত্রণ UITableViewকরছে সেটি মূল দৃষ্টিভঙ্গিতে নেই। একবার আমি এটি ঠিক করি, এটি এখন চ্যাম্পের মতো কাজ করছে।


আপনি কীভাবে "কীভাবে" ভাগ করে নিতে পারেন?
ব্র্যাবেলদাস

1

আমার নিজেই এই সমস্যাটি পেয়েছিলাম এবং এটি ঠিক করতে আমাকে পুরো 3 ঘন্টা (যার মধ্যে 2 গুগলিং) লেগেছিল।

যেটির সাহায্যে পরিণত হয়েছিল তা হ'ল ডিভাইস / সিমুলেটর থেকে অ্যাপটিকে মুছে ফেলা, পরিষ্কার করে আবার চালানো

আশা করি এইটি কাজ করবে


1
[self.navigationController setDelegate:self];

রুট ভিউ নিয়ন্ত্রণকারীকে প্রতিনিধি সেট করুন।


1

সুইফ্টের জন্য। ভিউউইল অ্যাপয়ারে আপনি যা কল করতে চেয়েছিলেন তা কল করতে প্রথমে প্রোটোকল তৈরি করুন

protocol MyViewWillAppearProtocol{func myViewWillAppear()}

দ্বিতীয়ত, ক্লাস তৈরি করুন

class ForceUpdateOnViewAppear: NSObject, UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool){
    if let updatedCntllr: MyViewWillAppearProtocol = viewController as? MyViewWillAppearProtocol{
        updatedCntllr.myViewWillAppear()
    }
}

}

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


0

আমার ক্ষেত্রে সমস্যাটি ছিল কাস্টম ট্রানজিশন অ্যানিমেশন নিয়ে। যখন সেট করা হয় modalPresentationStyle = .custom viewWillAppearনা

কাস্টম ট্রানজিশনে অ্যানিমেশন ক্লাসে কল পদ্ধতিগুলি প্রয়োজন: beginAppearanceTransitionএবংendAppearanceTransition


0

আমার ক্ষেত্রে এটি আইওএস 12.1 এমুলেটরটিতে একটি অদ্ভুত বাগ ছিল। রিয়েল ডিভাইস চালু করার পরে অদৃশ্য হয়ে গেছে।


0

আমি একটি ক্লাস তৈরি করেছি যা এই সমস্যার সমাধান করে। কেবল এটি আপনার নেভিগেশন নিয়ন্ত্রকের প্রতিনিধি হিসাবে সেট করুন, এবং আপনার ভিউ কন্ট্রোলারে সাধারণ একটি বা দুটি পদ্ধতি প্রয়োগ করুন - যখন দেখানো হবে বা নেভিগেশনকন্ট্রোলারের মাধ্যমে দেখানো হবে তখন কল হবে

এখানে কোডটি জিআইএসটি দেখাচ্ছে


0

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


0

আমার সমস্যাটি হ'ল ভিউ উইলএপিয়ারকে কোনও সিগেস থেকে আনওয়ানড করার সময় কল করা হয়নি। উত্তরটি ছিল আপনি যে ভিউ কন্ট্রোলারটিতে ফিরে যাচ্ছেন তাতে অনিচ্ছাকৃত সেগুটিতে ওয়েল অ্যাপয়ার (সত্য) কাছে একটি কল দেওয়া হয়েছিল

@ আইবিএ ফান আনচাইন্ড (আনইন্ডসাইডের জন্য: ইউআইএসটিবোর্ডসেইগ, ভিউকন্ট্রোলার পরবর্তী ভিসি: যে কোনও) {

   viewWillAppear(true)
}

-2

আমি নিশ্চিত না যে এটিই আমি একই সমস্যার সমাধান করেছি।
কিছু ক্ষেত্রে, পদ্ধতি "[স্ব-পদ্ধতিOne]" এর মতো সাধারণ উপায়ে কার্যকর করা হয় না।

চেষ্টা

- (void)viewWillAppear:(BOOL)animated
{
    [self performSelector:@selector(methodOne) 
           withObject:nil afterDelay:0];
}

সমস্যাটি একেবারেই viewWillAppearবলা হয় না
ব্যাসাচলভ গের্চিকভ

-3

আপনার যে কোনও সময়ে কেবল 1 টি ইউআইভিউ কনট্রোলার সক্রিয় থাকা উচিত। আপনি যে কোনও মতামত পরিচালনা করতে চান সেগুলি হ'ল সাবউজওস - অর্থাত্ ইউআইভিউ।

আমি আমার দর্শন শ্রেণিবিন্যাস পরিচালনার জন্য একটি সিম্পল কৌশল ব্যবহার করি এবং যেহেতু আমি এভাবে কাজ করা শুরু করেছি তখন থেকেই কোনও সমস্যার মধ্যে পড়তে হয়নি। দুটি মূল পয়েন্ট রয়েছে:

  • আপনার অ্যাপ্লিকেশনটির "স্ক্রিনের মূল্য" পরিচালনা করতে একটি একক ইউআইভিউকন্ট্রোলার ব্যবহার করা উচিত
  • মতামত পরিবর্তন করার জন্য ইউআইএনএভিগেশন কন্ট্রোলার ব্যবহার করুন

"একটি পর্দার মূল্য" বলতে কী বোঝ? এটি উদ্দেশ্য হিসাবে কিছুটা অস্পষ্ট তবে সাধারণত এটি আপনার অ্যাপ্লিকেশনটির একটি বৈশিষ্ট্য বা বিভাগ। যদি আপনি একই পটভূমির চিত্রযুক্ত তবে বিভিন্ন ওভারলে / পপআপ ইত্যাদির সাথে কয়েকটি স্ক্রিন পেয়ে থাকেন তবে সেটি 1 ভিউ নিয়ামক এবং বেশ কয়েকটি শিশু দর্শন হওয়া উচিত। নিজেকে কখনই 2 টি ভিউ কন্ট্রোলারের সাথে কাজ করা উচিত নয়। নোট নোট আপনি এখনও একটি ভিউ নিয়ন্ত্রকের মধ্যে একটি ইউআইভিউ ইনস্ট্যান্ট করতে পারেন এবং যদি আপনি পর্দার নির্দিষ্ট অঞ্চলগুলি একাধিক দর্শনীয় নিয়ামকগুলিতে দেখানো চান তবে এটি অন্য ভিউ নিয়ন্ত্রকের একটি সংক্ষিপ্তসার হিসাবে যুক্ত করতে পারেন।

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

আমি যখন অ্যাপটি শুরু করি তখন প্রতিবার আমি যা করি তা এখানে:

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

(দ্রষ্টব্য উইন্ডো-ভিত্তিক থেকে শুরু করা কেবল একটি ব্যক্তিগত পছন্দ - আমি নিজেই জিনিসগুলি তৈরি করতে চাই যাতে তারা ঠিক কীভাবে তৈরি হয় তা আমি জানি view ভিউ-ভিত্তিক টেম্পলেট দিয়ে এটি সূক্ষ্মভাবে কাজ করা উচিত)

সমস্ত ঘটনা সঠিকভাবে আগুন এবং মূলত জীবন ভাল। তারপরে আপনি আপনার অ্যাপ্লিকেশনটির গুরুত্বপূর্ণ বিটগুলি লেখার জন্য এবং মস্তিষ্কে ভিউয়ের স্তরবিন্যাসকে আকারে হ্যাক করার চেষ্টা করার বিষয়ে গোলমাল না করে আপনার সমস্ত সময় ব্যয় করতে পারেন।


একাধিক ভিউ কন্ট্রোলার সক্রিয় থাকাতে কোনও ভুল নেই; ইউআইভিউকন্ট্রোলারের একটি শ্রেণিবদ্ধ নির্মাণের অনুমতি দেওয়ার জন্য পদ্ধতি রয়েছে (যেমন [অ্যাডচিল্ডভিউ কনট্রোলার:])।
রিচার্ড

1
হ্যাঁ এখন তা করে। ২০১১ সালে তা হয়নি। উত্তরটি তখন সঠিক ছিল, স্বীকারোক্তি এখন এটি হয় না।
নাইজেল ফ্ল্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.