2013-10-09 3 views
2

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

С помощью этого кода я могу вернуться к индексу точно, но я не могу взять содержимое ячейки и поместить ее в строку.

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *CellIdentifier = @"Cell"; 
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 

    NSString *strColorCell = cell.lblCustomCell.text; 
    NSLog(@"Indice della cella: %i %i %@", indexPath.item, indexPath.section * 2 + indexPath.row, strColorCell); 
} 
+3

Зачем нужно получать значение из ячейки? Наверняка, это какая-то структура данных, которую вы использовали для заполнения ячейки в первую очередь (т. Е. Один из методов 'UICollectionViewDataSource')? – trojanfoe

ответ

1

Ассинг значение тега при создании UILabel

Тогда в вашем коде, вы можете получить на этикетке

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
    UILabel *custLabel = (UILabel*)[cell viewWithTag:labelTag]; 
    NSString *strColorCell = custLabel.text; 
    NSLog(@"Indice della cella: %i %i %@", indexPath.item, indexPath.section * 2 + indexPath.row, strColorCell); 
} 

Я надеюсь, что это помогает.

4

Эта линия

CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 

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

CustomCell *cell = [collectionView.dataSource collectionView:collectionView cellForItemAtIndexPath:indexPath]; 

, чтобы получить правильную ячейку.

Однако, в принципе, это неправильный подход: вы должны использовать indexPath, чтобы запросить модель для текста метки, а не просить представление. Взгляните на код вашего метода collectionView:cellForItemAtIndexPath и найдите место, где вы используете indexPath, чтобы установить текст метки. Текст исходит из ваших классов моделей. Вы должны сделать то же самое в своем методе didSelectItemAtIndexPath.

+0

Вы должны, вероятно, дать ему способ получить доступ к его массиву правильно, используя indexPath. –

+0

@TotumusMaximus Так как я не вижу кода OP для метода 'collectionView: cellForItemAtIndexPath', все, что я могу сделать, это сказать ему, где искать. Однако это не должно быть слишком сложно. – dasblinkenlight

+0

Часто способ получения данных в didselect и cellforitem/row аналогичен. И поскольку он не делает этого прямо здесь, я подозреваю, что то же самое происходит в cellforitem. Люди склонны повторять одни и те же или подобные ошибки снова и снова в моем опыте. Так что учить их правильному пути предпочтительнее для меня –

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