سؤال

وأنا أستخدم الأسلوب التالي في طلبي:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 0)
    {
        cell.contentView.backgroundColor = [UIColor lightGrayColor];
        cell.contentView.alpha = 0.5;
    }
}   

وعند تشغيل التطبيق لدي 7 الصفوف في مائدتي. يجب وفقا للمهمة المذكورة أعلاه فقط الخلية من الصف الأول (الصف رقم 0) يتم تنسيق (بسبب اذا كان الشرط).

ويتم تنسيق خلية الصف 1ST (الصف رقم 0) صحيح (حسب النتيجة المرجوة). ولكن إذا كنت انتقل الجدول أسفل خلية واحدة أكثر يتم عرضها كما تنسيقها: خلية في الصف رقم 5

لماذا ذلك؟

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

المحلول

وأنا أتفق مع الإجابة فلاديمير. ومع ذلك، وأعتقد أيضا يجب أن تتبع نهجا مختلفا.

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

وهناك حل أكثر أناقة هو تهيئة الصف 1ST بشكل مختلف عن الآخرين فقط "مرة واحدة": عند إنشاء خلايا الجسم

.
    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier;
        if(indexPath.row == 0)
        CellIdentifier = @"1stRow";
        else
        CellIdentifier = @"OtherRows";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell==nil) { 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            if(indexPath.row == 0){
                cell.contentView.backgroundColor = [UIColor lightGrayColor];  
                cell.contentView.alpha = 0.5;
                    // Other cell properties:textColor,font,...
            }
            else{
                cell.contentView.backgroundColor = [UIColor blackColor];  
                cell.contentView.alpha = 1;
                //Other cell properties: textColor,font...
            }

        }
        cell.textLabel.text = .....
        return cell;
    }

نصائح أخرى

وأعتقد أن السبب هو أن TableView إعادة استعمال الخلايا الموجودة بالفعل، ويعرض لهم إذا كان ذلك ممكنا. ما يحدث هنا - عندما يتم تمريره الجدول والصف 0 يصبح يستخدم الخفية الخلية ثم itscorresponding لصف عرض حديثا. حتى إذا كنت إعادة استخدام الخلايا يجب إعادة تعيين خصائصها:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
   if(indexPath.row == 0) { 
       cell.contentView.backgroundColor = [UIColor lightGrayColor];  
       cell.contentView.alpha = 0.5; } 
   else
   {
    // reset cell background to default value
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top