didSelectRowAtIndexPath для пользовательской метки Cell

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

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; [cell.contentView addSubview:label]; label.text = [tableArr objectAtIndex:indexPath.row]; label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; return cell; } 

но он не работает. Он отлично работал, когда я использовал cell.textLabel, но не с пользовательской меткой.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell1 = [tableView cellForRowAtIndexPath:indexPath]; UILabel *lbltemp = cell1.textLabel; _parent.labelone.text = lbltemp.text; } 

6 Solutions collect form web for “didSelectRowAtIndexPath для пользовательской метки Cell”

Вы можете создать свой собственный подкласс UITableViewCell чтобы вы могли получить ссылку на свой ярлык (и не позволять создавать несколько ярлыков в ячейке). Или вы можете использовать теги:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell = nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; label.tag = 123123; [cell.contentView addSubview:label]; } UILabel *label = (UILabel *)[cell viewWithTag:123123]; label.text = [tableArr objectAtIndex:indexPath.row]; label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; UILabel *label = (UILabel *)[cell viewWithTag:123123]; _parent.labelone.text = label.text; } 

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

Кроме того, вы обычно не должны хранить текст в ярлыке, вы должны по-настоящему использовать свой tableArr для получения текста. Подход тегов больше подходит для обновления метки при повторном использовании ячейки или если вы позволяете пользователю редактировать текст (в UITextField ).

Причина, по которой он не работает, заключается в том, что вы не ссылаетесь на пользовательскую метку в didSelectRowAtIndexPath . Самый простой способ получить ссылку на пользовательскую метку – это использовать теги:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; // Also, this is the proper way to use reuseIdentifier (your code is incorrect) UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; [cell.contentView addSubview:label]; label.text = [tableArr objectAtIndex:indexPath.row]; label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; label.tag = 1; return cell; } - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath { UITableViewCell *cell1 = [tableView cellForRowAtIndexPath:indexPath]; UILabel *customLabel = [cell viewWithTag:1]; _parent.labelone.text = customLabel.text; } 

Проблема заключается в том, что cell1.textLabel не является созданной вами меткой. Это просто ярлык по умолчанию, созданный ячейкой.

Решение может быть:

Добавьте тег на свой ярлык, когда вы создаете свою собственную ячейку.

Скажем label.tag=100;

В didSelectRow ,

использование

 UILabel *lbltemp=(UILabel *)[cell1.contentView viewWithTag:100]; 

затем _parent.labelone.text=lbltemp.text; should _parent.labelone.text=lbltemp.text; should захватить ваш текст с этого ярлыка.

Здесь ([cell.contentView addSubview: label]; _) вы создаете свой пользовательский ярлык и добавляете его в виде subview для представления содержимого ячейки, но в UILabel * lbltemp = cell1.textLabel; вы пытаетесь получить доступ к метке по умолчанию для ячейки tableview. Добавьте какой-нибудь идентификатор (например, тег) на свой ярлык и получите доступ к нему в файле didSelectRowAtIndexPath.

Я думаю, вы можете использовать стандартную метку и отказаться от этого обходного пути, просто добавьте

 cell.textLabel.frame = CGRectMake(10,10, 300, 30); 

Также лучше, чтобы память повторно использовала ячейки, как в ответе Вайна

использовать cell.indentationallevel или cell.indentationwidth

  • UITableView - cellForRowAtIndexPath не называется
  • UITableViewCell - как сбросить содержимое перед повторным использованием
  • Как отдать теневую карту в iOS
  • Скрыть ярлык в TableViewCell при удалении
  • Возможно ли создать несколько ячеек в одном xib?
  • объективная-четкая NSURLCredential - NSURLCredentialPersistenceForSession
  • Ошибка регистрации пользовательских подклассов UITableViewCell
  • KVO для всех свойств объекта
  • Ошибка «Недопустимое обновление: недопустимое количество строк в разделе 0», пытающееся удалить строку в таблице.
  • UITableView с двумя пользовательскими ячейками (несколько идентификаторов)
  • Отключить удаление, но разрешить перемещение ячеек в UITableView
  • Interesting Posts

    React native определить, когда текст отключен

    Как разместить два iOS UITableViews, рядом?

    Стань первым ответчиком без анимации

    XCode: 7 Ошибка установки приложения: не был найден действительный профиль подготовки для этого исполняемого файла

    Как создать «липкий» нижний колонтитул для UICollectionView?

    Как отличить объект класса к согласованию с протоколом witih

    Ошибки в биткоде с SDK LinkedIn

    Как убрать клавиатуру, когда нажата кнопка поиска «Поиск» в UISearch?

    Удаление только некоторых строк в UITableView

    AIR / as3 ключевое слово для ввода ключевого слова верхнего уровня

    Theos tweak работает на iPhone 5, но не на iPad 3

    iOS CGPDFScanner для поиска текстовых позиций

    Проверка и удаление неподдерживаемой архитектуры в IPA / Архив

    Пользовательский вид TextField Как рассчитать сумму TextField

    iOS 8 Google Maps SDK myLocation значок пузырьковый графический сбой

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.