تأجيل ViewWillAppear حتى WebViewDidfinishLoad
سؤال
لدي تطبيق يستخدم UIWebViews
في العديد من وحدات تحكم المشاهدة. ال UIWebViews
تستخدم لجعل HTML الذي تم إنشاؤه محليا، ولا يلزم الوصول إلى شبكة بطيئة.
لحفظ الذاكرة، أحملها فقط عند الطلب على النحو الذي دفعته ViewController viewWillAppear
أتصل مرة أخرى. (وتفريغ مثيلات خارج الشاشة استجابة ل didReceiveMemoryWarning
رسائل.)
المشكلة هي أن المستخدم يحصل على رؤية html الذي يتم تقديمه، يرافقه أحيانا بمضات من التصميم وغيرها من القطع الأثرية غير السارة متنوعة. وأود أن يتم تقديم التقديم كثيرا، والكشف عن وجهة النظر المنصوص عليها بالكامل عند استعدادها.
سيكون مرتبيا جدا لتكون قادرة على الحصول على viewWillAppear
لا تعود حتى يتم تقديم UIWebView بالكامل. ولكن كيف؟
أنا أقول UIWebView
ما يجب التجسيد عن طريق إرساله loadHTMLString:baseURL:
رسالة. هذا غير متزامن، وبعض الوقت (قريبا) في وقت لاحق يطلق عليه مندوب الويب webViewDidFinishLoad
.
جربت مع تشغيل Runloop من الداخل viewWillAppear
, ، تشغيل إما NSDefaultRunLoopMode
أو UITrackingRunLoopMode
. وبعد هذا يعمل في محاكاة (يشكو من السجل
مزامنة catransaction] يسمى ضمن المعاملة
ولكن لا يعمل) ولكن على الجهاز الجمود، مع webViewDidFinishLoad
لا تسمى أبدا.
(أيضا، يبدو وكأنه UIWebView
خاصية التحميل لا يعمل. على الأقل، بعد أن أدعو loadHTMLString:baseURL:
وقبل الحصول على رد الاتصال فهذا غير صحيح.)
لا يوجد حل صحيح
نصائح أخرى
الكثير من الحلول هنا أعتقد. واحد سريع هو تحميل UIWebView الخاص بك مع مجموعة الخاصية المخفية في نعم. ثم قم بتعيين UiviewController الخاص بك كمفوض UIWebViews وتنفيذ:
- (void)webViewDidFinishLoad:(UIWebView *)webView
حيث قمت بتعيين الخاصية مرة أخرى إلى لا.
شيء يجب ملاحظته هو أن WebViewDidDFinish سوف ينطلق أكثر من مرة إذا كنت قد تأطير / محتوى مضمن. لذلك عليك أن تتبع ذلك. يجب أن لا تكون حقا مشكلة إذا كنت تقوم بتحميل المحتوى المحلي.
أحب حل monowerker بشكل أفضل، لكن حل آخر سيكون التمسك ب uiwebview المجازة بالفعل في كل وقت (في كائن أكثر دامة أكثر من وحدة التحكم العرضية). سأفعل ذلك فقط إذا كانت مظهر حل Monowerker مؤخر للغاية.