Введение
У меня есть коллекция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];
}
Визуальная поддержка
Вопрос
Почему меняется только одна клетка, а не остальные?
Update 1
Длительное нажатие темы (иногда) постепенно обновляет метки ячейки правильно. Все еще не уверен, что вызывает это.
Трудно понять весь код, который вы опубликовали, и полностью его понять, но моя интуиция указывает мне на этот оператор if, где у вас есть: «if ((indexPath.row == 1) && (indexPath.section == 0))». Вы разрешаете коду влиять на строку 1. – manecosta
@manecosta if ((indexPath.row == 1) && (indexPath.section == 0)) для статических ячеек на странице настроек; т. е. если эта ячейка используется, примените эту тему. – cyril