كيفية استدعاء طريقة تلقائيًا بعد إخراج وحدة التحكم في العرض من المكدس على iPhone

StackOverflow https://stackoverflow.com/questions/1001441

  •  05-07-2019
  •  | 
  •  

سؤال

أحتاج إلى تحديث طريقة العرض الأصلية على جهاز iPhone بعد ظهور طريقة عرض فرعية من حزمة التنقل.كيف يمكنني إعداد العرض الأصلي ليتم إعلامه أو تلقي استدعاء أسلوب تلقائي عندما يتم إخراج الطفل من المكدس ويصبح الأصل مرئيًا مرة أخرى؟

يقوم المستخدم بإدخال البيانات في الصفحة الفرعية التي أريد عرضها على الصفحة الرئيسية بعد انتهاء المستخدم ثم ظهور العرض.

شكرا لمساعدتك!

هل كانت مفيدة؟

المحلول

ولقد حل نفس هذه المشكلة النفس - وإجابات صحيحة تقريبا أعلاه، نسوا فقط حول تعيين مندوب

ولدي وجهة نظر تحكم الجذر الذي يعرض حجم قائمة، تدعو وحدة تحكم عرض الطفل قد تعمل على تغيير حجم القائمة، ويجب تحديث حجم عند عودتهم.

وعندما خلق رأي الوالدين بلدي (SettingsView أدناه)، وإضافته كطريقة عرض جذر UINavigationController، وتأكد من تعيين مندوب UINavigationController قبل I عرض وجهة النظر - وهذا هو جزء أساسي:

SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv];
[nc setDelegate:sv];

في وجهة نظر الوالدين، وتنفيذ بروتوكول UINavigationControllerDelegate:

@interface SettingsView : UIViewController <UINavigationControllerDelegate>

ووتوفير طريقة willShowViewController:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // Your code to update the parent view
}

وهذا ما يسمى بعد رفض عرض طفل، وقبل أن يتم إعادة عرض وجهة نظر الوالدين.

نصائح أخرى

كان لدي حاجة للقيام بشيء مثل هذا أيضًا.في ال ViewController التي تملكها UINavigationController, ، كان علي أن أنفذ willShowViewController, ، مثله:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
}

يتم استدعاء هذه الطريقة عندما يقوم UINavigationController بتغيير طرق العرض.إذا كنت أفهم سؤالك بشكل صحيح، أعتقد أن هذا يجب أن يفعل ما تريد.

وأعتقد أن هناك بعض الالتباس هنا. لا يتم دفع UIViews لوبرزت من كومة UINavigationController ل. ما يتم دفعه وبرزت غير UIViewControllers، والتي بدورها التعامل مع واحد أو (في كثير من الأحيان) عدة آراء لكل منهما.

لحسن الحظ، UIViewController ديه هذه الأساليب:

-(void) viewWillAppear:(BOOL)animated;
-(void) viewDidAppear:(BOOL)animated;
-(void) viewWillDisappear:(BOOL)animated;
-(void) viewDidDisappear:(BOOL)animated;

وهذه تسمى كلما الرأي حول إلى (ديس) تظهر، أو لديه فقط (ديس) يبدو. I يعمل مع قضبان التبويب، وجهات النظر الوسائط وأجهزة التحكم والملاحة. (وانها فكرة جيدة للاستفادة من هذه عند تنفيذ وحدات تحكم مخصصة.)

وحتى في الحالة الخاصة بك، إذا فهمت بشكل صحيح، عليك ببساطة لتجاوز viewWillAppear: أو viewDidAppear: الطريقة على ما تسمونه "صفحتها الرئيسية" (والتي يتم التعامل معها من المفترض من قبل UIViewController) ووضعها في التعليمات البرمجية لتحديث مظهر الصفحة لتعكس البيانات دخلت للتو.

و(إذا كنت أتذكر بشكل صحيح، يجب عليك التأكد من أن UINavigationController يحصل على رسالة viewWill/DidAppear: عند عرضه لأول مرة، من أجل هذه الرسائل إلى وقت لاحق يتم إرسالها إلى وحدات تحكم التابعة له، وإذا وضع هذا الأمر مع قالب أو في IB ربما كنت لا داعي للقلق حول هذا الموضوع.)

وFelixyz الجواب لم الحيلة بالنسبة لي. استدعاء عرض سيظهر طريقة سيتم تشغيل التعليمات البرمجية في كل مرة يظهر الرأي. تختلف عن رأي فعل الحمل، التي تدير رمزها فقط عندما يتم تحميل عرض لأول مرة. ذلك أن رأي والديك تقم بتحديث نفسها اذا غيرت وجهة نظر الطفل من المعلومات المعروضة في الأصل، وكان بعد ذلك انتشرت قبالة كيس. ولكن إذا كان الوالدان يدعو سيظهر عرض، ويحصل على ركض رمز في كل مرة تعرض طريقة العرض النسخ الاحتياطي.

تأكد من استدعاء الأسلوب السوبر في نفس الوقت. ومن شأن التنفيذ السليم تبدو هذه:

- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
    NSLog(@"View Appearing");
}

إذا كنت بحاجة إلى إعلام تحكم واحدة إلى أخرى يمكنك استخدام نمط تفويض كما هو موضح <لأ href = "https://stackoverflow.com/questions/244588/is-parentviewcontroller-always-a-navigation-controller/994164# 994164 "> هنا (انظر الجواب 2ND) .

للأسف لا يوجد الإخطار التلقائي (AFAIK) لمهمة بالضبط كما وصفته أنت. لتلبية الاحتياجات الخاصة بك يمكنك إرسال رسالة إلى المفوض (أي إلى وحدة تحكم والديك) في viewWillDisappear وظيفة من وحدة تحكم طفلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top