2014-02-13 3 views
1

Я использую UICollectionView. в табличном виде этикетка перегружает каждый раз, когда я пользуюсь этим кодомПерегрузка UILabel в UICollectionView

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 90.0,90.0, 21.0)]; 

    [label setTag : indexPath.row]; 

    label.text = [NSString stringWithFormat:@"%@",[arrImages objectAtIndex:indexPath.row]]; 

    label.textColor = [UIColor redColor]; 

    label.backgroundColor = [UIColor clearColor]; 

    label.font = [UIFont boldSystemFontOfSize:12]; 

    label.textColor = [UIColor colorWithRed:46.0/255.0 green:63.0/255.0 blue:81.0/255.0 alpha:1.0]; 

    [cell.contentView addSubview:label]; 

return cell; 
} 

Помогите мне?

+0

Который имеет средства перегрузки? – Dolo

+0

cellForItemAtIndexPath его вызов при каждом прокрутке – codercat

+0

@dolo overload означает, что загрузка меток каждый раз, когда я просматриваю представление коллекции, и это отображение нескольких ярлыков на одном изображении. – user2524618

ответ

4

Клетка получит из очереди с помощью переробочик UICollectionView в - ярлык сам остается в переработанной клетке, так что нет никакой необходимости в Перераспределение его, вам просто нужно найти, где вы разместили его:

#define LABEL_TAG 100001 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; 

    UILabel *label = (UILabel*)[cell.contentView viewWithTag:LABEL_TAG]; 

    if (!label) { 
     label = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 90.0,90.0, 21.0)]; 
     label.textColor = [UIColor redColor]; 
     label.backgroundColor = [UIColor clearColor]; 
     label.font = [UIFont boldSystemFontOfSize:12]; 
     label.textColor = [UIColor colorWithRed:46.0/255.0 green:63.0/255.0 blue:81.0/255.0 alpha:1.0]; 
     label.tag = LABEL_TAG; 
     [cell.contentView addSubview:label]; 
    } 

    label.text = [NSString stringWithFormat:@"%@",[arrImages objectAtIndex:indexPath.row]]; 
    return cell; 
} 
+0

Спасибо за простое решение. – user2524618

0

Вы должны сгенерировать экземпляр своего ярлыка только один раз, для жизни - время ячейки.

Но, как я вижу в вашем методе, каждый раз, когда вызывается метод, вы получите новый экземпляр метки.

В принципе, вы можете подклассифицировать UICollectionViewCell, а затем сгенерировать требуемую метку только один раз. В приведенном здесь методе делегата вы должны обновлять их только с необходимой информацией.

Смежные вопросы