سؤال

الفرضية بسيطة بشكل ملحوظ: أريد عرض طريقة عرض مشروط في تطبيق iPad يستخدم UISplitViewController.

التسلسل الهرمي للمنظر مستقيم إلى الأمام:

                                              /- TableViewController1
                     /- root:TabBarController -- TableViewController2
SplitViewController -
                     \- detail:CustomViewController

عندما أنقر على إحدى خلايا الجدول في TableViewController1 ، أفتح طريقة عرض مشروط:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip {
  UIViewController *vc = [[MyModalClass alloc] init];
  UINavigationController *nc = [[UINavigationController alloc]
                                initWithRootViewController:vc];
  nc.modalPresentationStyle = UIModalPresentationFormSheet;
  nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:nc animated:true];
  [nc release];
  [vc release];
}

هذا يعمل بشكل جيد: تظهر العرض. تبدأ المشاكل عندما أحاول رفضها في أي اتجاه غير المشهد.

في ModalViewController ، يتم تشغيل الطريقة التالية بواسطة Uitabbarbutton في شريط التنقل:

- (void) closeButtonInNavBarWasClicked:(id)sender {
  [self dismissModalViewControllerAnimated:true];
}

وهذا هو المكان الذي تبدأ فيه المشاكل.

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

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

بعض الأشياء التي جربتها بالفعل ، بدون نجاح:

  • تفريغ شريط علامة التبويب ، ما عليك سوى عرض TableViewController1 كوحدة تحكم الجذر لعرض الانقسام
  • قم بإنشاء بروتوكول مندوب بحيث يرفض TableViewController1 الأصل عرض العرضي بدلاً من عرض mymodalclass نفسه.
  • تقديم/رفض العرض المشروط على TableViewController1.SplitViewController يجعل الأمور أسوأ: لا يظهر العرض.
  • التضحية بالعديد من الماعز لم يساعد.

سأقدر بشكل كبير أي مدخلات في هذه المسألة.

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

المحلول

لديّ نوع من الإجابة على سؤالي الخاص: استخدمت الأدوات للتخلص بشكل منهجي لجميع تسرب الذاكرة في تطبيقي. بمجرد أن فعلت ذلك ، اختفت المشكلة.

نصائح أخرى

لقد واجهت نفس المشكلة مثلك ، لقد قمت بحلها عن طريق إجبارها بشكل برمجي على تدوير العرض الخاص بي في ViewController (بمجرد إرجاعه) ، في طريقة ViewDidAppear إلى بعض الدوران التعسفي. بالطبع بدون رسوم متحركة. ثم تدويره مرة أخرى إلى الاتجاه المطلوب (الذي أنقذته قبل الدوران).

لذلك ، إذا كان VC1 يعرض VC2 بشكل أساسي ، وتدور المستخدم VC2 ، فأنا أقوم بتعيين اتجاه VC1 وفقًا للاتجاه الحالي لـ VC2 عن طريق الاتصال: uiinterfaceorientation currentorientation = self.interfaceorientation ؛ // تخزين الاتجاه الحالي لـ VC2 (عرض مشروط) [VC1 willrotatetointerfaceorientation: مدة الحالية: 0] ؛

ثم أقوم بتشويش VC2 وفي عرض VC1 أفعل هذا:

-(void) viewDidAppear: (Bool) الرسوم المتحركة {

[super viewDidAppear:animated];

/* Store wanted orientation */
UIInterfaceOrientation currentOrientation = self.interfaceOrientation; 

/* rotate to some arbitrary orientation, this solves the bug. */
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO]; 

[[UIDevice currentDevice] setOrientation:currentOrientation animated:NO]; //restore wanted orientation.

}

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