2014-12-22 3 views
0

Введение
У меня есть коллекцияView, размещенная в моем mainViewController с каждым DailyCell (обычным классом UICollectionViewCell), имеющим две метки. У меня также есть контроллер вида «Настройки», который изменяет цвет определенных меток mainViewController, в том числе те, которые содержатся в коллекцииViewController через общий экземпляр (singleton) viewController (.Vc). Панель настроек меняет цвета всех других ярлыков, за исключением тех, которые присутствуют в коллекции, из которых меняются только две ячейки.Изменение цвета метки в UICollectionViewCell происходит только в одной ячейке?

Код
Вот код CollectionView в моем mainViewController.m:

#pragma mark - UICollectionViewDataSource 

// 2 
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    return 1; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    // 1 
    return MIN([[WXManager sharedManager].dailyForecast count], 6) + 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    _cell = [collectionView dequeueReusableCellWithReuseIdentifier:DayCell forIndexPath:indexPath]; 
    //Fetch Data 
    WXCondition *weather; 
    weather = [WXManager sharedManager].dailyForecast[indexPath.row]; 
    averageWeather = (weather.tempHigh.floatValue + 
         weather.tempLow.floatValue)/2.0; 
    [_cell.labelTemp setText:[NSString stringWithFormat:@"%.0f°", 
           averageWeather]]; 

    return _cell; 
} 

Вот обычай Ежедневно код класса Cell, где инициализируются две метки:

if (self) { 
     s = [Singleton sharedInstance]; 
     s.Dc = self; 
     // Initialize Label Day 
     [self.labelDay setTextColor:[UIColor lightGrayColor]]; 
     [self.contentView addSubview:self.labelDay]; 

     // Initialize Label Temp 
     [self.labelTemp setTextColor:[UIColor lightGrayColor]]; 
     [self.contentView addSubview:self.labelTemp]; 
return self; 
} 

И вот часть настроек, в которой я пытаюсь изменить цвет этих двух меток, в зависимости от того, какая статическая ячейка в настройках выбрана (т. е. когда эта ячейка нажата в настройках, применять эти цвета к меткам в ViewController):

if ((indexPath.row == 1) && (indexPath.section==0)) { 
     //argentum 
    s.Dc.labelDay.textColor=[UIColor redColor]; 
    s.Dc.labelTemp.textColor=[UIColor orangeColor]; 

} 
if ((indexPath.row == 0) && (indexPath.section==0)) { 
    //album 
    s.Dc.labelDay.textColor=[UIColor lightGrayColor]; 
    s.Dc.labelTemp.textColor=[UIColor lightGrayColor]; 
} 

Визуальная поддержка
Only one changing Вопрос
Почему меняется только одна клетка, а не остальные?

Update 1
Длительное нажатие темы (иногда) постепенно обновляет метки ячейки правильно. Все еще не уверен, что вызывает это.

+0

Трудно понять весь код, который вы опубликовали, и полностью его понять, но моя интуиция указывает мне на этот оператор if, где у вас есть: «if ((indexPath.row == 1) && (indexPath.section == 0))». Вы разрешаете коду влиять на строку 1. – manecosta

+0

@manecosta if ((indexPath.row == 1) && (indexPath.section == 0)) для статических ячеек на странице настроек; т. е. если эта ячейка используется, примените эту тему. – cyril

ответ

0

если indexPath.row равно нулю означает, что первый элемент был выбран (WED), если indexPath.row равно один, то вы имеете в виду второго элемента и так далее. Там есть метод, который вы должны попробовать: didSelectRowAtIndexPath

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
 

 
    s.Dc.labelDay.textColor=[UIColor redColor]; 
 
    s.Dc.labelTemp.textColor=[UIColor orangeColor]; 
 

 
}

Я не совсем уверен, Тхо, дайте мне знать!

+0

Это действует только тогда, когда выбрана ячейка - в моем случае ячейки, «постучавшие», действуют как кнопки для изменения темы приложения, то есть изменения цвета UILabels в другом контроллере представления – cyril

0

Моя догадка заключается в том, что когда вы вводите s.Dc = self; в свою ежедневную ячейку, она удаляет предыдущую ячейку, установленную в свойстве Dc, чтобы заменить ее на текущую. И поэтому у вас всегда есть одна ячейка, связанная с вашим синглом.

Другой способ сделать это - сохранить перечисление (назовем его dayCellTheme) в вас singleton. Это вы обновляете при выборе ячейки в вашем НастройкеПросмотр.

Затем в источнике данных cellForRowAtIndexPath вашего collectionViewController вы задаете цвет своих меток соответственно этому свойству.

Теперь все, что вам нужно сделать, это использовать reloadData в вашем представлении коллекции, когда вы покидаете setViewController.

Все еще я могу ошибаться о вашей проблеме. Дай мне знать !

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