سؤال

أحاول الحصول على uiactiveInverIndicatorView إلى "الظهور والتحريك" عندما يتم تمرير المستخدم إلى أسفل ApimalView ....

عند الوصول إلى أسفل عرض الجدول، يتم تقديم طلب ويب سيؤخذ بضع ثوان لإكماله ثم يجب أن يتوقف uiactivityindicatorView "

أنا أداء ظهور UiactivityIndicatorView باستخدام TableView: Willdisplaycell: forrowatindexpath:

قائمة الاغراض

ولكن المشكلة هي أن UiactiveIndicatorView لا يظهر على شاشة iPhone حتى بعد الطريقة بأكملها (أي الجدول الافتراضي: Willdisplaycell: ForrowatIndExPath :) يسمى، وبالتالي فهو مخفي بالفعل.

أي أفكار حول كيفية:

  1. إظهار عرض المؤشر
  2. جعل طلب الويب
  3. إخفاء عرض المؤشر؟

موضوع جديد؟ طريقة افضل؟

شكرا!!

على وجه التحديد، وظيفتي تبدو وكأنها

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.results && indexPath.row == [self.results count] - 1) {
        [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
        [self.loadingSignal startAnimating];

    /// make web request that will take a few seconds

        [self.loadingSignal setHidden:YES];
        [self.loadingSignal stopAnimating];

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

المحلول

تمام. من مقتطفك أعلاه من التعليمات البرمجية، أرى بعض المشاكل:

  1. يبدو أنك تخطط لانتظار الانتهاء من الطلب قبل عرض خلية. هذا يحتوي على عدد قليل من النقاط السلبية له: إنه مزعج للمستخدم وسوف تجمد على الأرجح UI أثناء الطلب (الأمر الذي قد يستغرق عدة ثوان).
  2. كل شيء يحدث داخل willDisplayCell طريقة.

إليك كيف أعتقد أنك يجب أن تحل هذه المشكلة:

  1. سيعرض تحميل الزناد الخلية غير متزامن.
  2. عرض خلية تقول "تحميل ..." مع سبينر الخاص بك (انظر Tweetie 2 للإلهام)
  3. انتظر دعوة الظهر من طلبك
  4. ملء النموذج الخاص بك مع الاستجابة
  5. إزالة الخلية "التحميل ...
  6. فرض تحديث البيانات الخاصة بك [tableView reloadData]

هذا يجب أن يسمح لك بتحقيق ما تريد القيام به.

نصائح أخرى

يمكنك محاولة القيام بذلك في Cellforrowatendexpath: طريقة القيمت

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