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

  • Яркость AVCaptureSession
  • Пользовательская ячейка tableView с прокруткой параллакса
  • Загрузка изображений с сервера для отображения в CollectionView
  • Ручное сохранение с помощью ARC
  • Расширяемая ячейка UITableview с использованием NSDictionary в iOS
  • Значение счетчика изменяется при прокрутке таблицы просмотра
  • Возвращаемый объект возвращается правильно?
  • Ориентация iPhone - как мне понять, какой путь вверх?
  • UITableView смещается вниз ~ 1 дюйм непреднамеренно при использовании с использованием меню боковой панели
  • Как освободить блок
  • Использование AFHTTPRequestOperation для построения URL (включая фигурные фигурные скобки)
  • Interesting Posts

    Маска CALayer работает неправильно

    Каковы наилучшие методы общения с представлениями контейнера

    Уровень AVAudioPlayer

    Отключить QuickType iOS 8 в поле ввода HTML

    Получение ограничений с использованием классов loadNibNamed и Size

    как отменить localNotification нажатием кнопки в swift?

    Приложения для iOS 8 застревают внутри устройства

    Плагин com.linkedin.LinkedIn.ShareExtension, прерванный в IOS

    IOS8 UISearchController отображает строку поиска напрямую

    Наблюдайте, когда UITabBar скрыт от делегата

    Откройте приложение «Карты» из кода – Где / Как найти «Текущее местоположение»?

    Приложения iOS Enterprise: как развертывать обновления?

    iCloud поддерживает 68 байтов моего приложения (файл plist), мне нужно установить флаг, чтобы исключить его из резервной копии icloud?

    Передача данных между контроллерами интерфейса в WatchKit

    MapKit увеличить текущее местоположение пользователя

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