Метод didSelecctRowAtIndexPath выглядит следующим образом:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.currSelectedRowTitle = [[self.effectsTableView cellForRowAtIndexPath:indexPath].textLabel text];
[self performSegueWithIdentifier:@"PushedByTableView" sender:self];
}
А cellForRowAtIndexPath выглядит следующим образом:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.effectsArray)
{
[self loadEffectsInArray];
}
static NSString *cellIdentifier = @"EffectsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
//6
Effect *effectCellEffect = [self.effectsArray objectAtIndex:indexPath.row];
NSString *effectCellText = effectCellEffect.name;
//7
[cell.textLabel setText:effectCellText];
//[cell.detailTextLabel setText:@"5 stars!"];
cell.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
//cell.backgroundColor = [UIColor blackColor];
//cell.textLabel.textColor = [UIColor whiteColor];
//cell.detailTextLabel.textColor = [UIColor grayColor];
//cell.textLabel.highlightedTextColor = self.effectsTableView.tintColor;
return cell;
}
Проблема в том, что [[self.effectsTableView cellForRowAtIndexPath: indexPath] .textLabel text] возвращает ноль на didSelectRowAtIndexPath. В чем проблема?
2 ответа
Вы не должны использовать клетки таким образом. Данные следует помещать в ячейку только для того, чтобы она могла их отобразить. Никогда не следует использовать представления для хранения данных и последующего их извлечения.
В вашем коде вы делаете ...
Effect *effectCellEffect = [self.effectsArray objectAtIndex:indexPath.row];
NSString *effectCellText = effectCellEffect.name;
cell.textLabel.text = effectCellText;
Так что в didSelectRow
сделайте то же самое ...
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Effect *effectCellEffect = [self.effectsArray objectAtIndex:indexPath.row];
self.currSelectedRowTitle = effectCellEffect.name;
[self performSegueWithIdentifier:@"PushedByTableView" sender:self];
}
Затем вы могли бы извлечь его в функцию путем рефакторинга, поскольку вы делаете то же самое в двух местах, но я оставлю это на ваше усмотрение.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableviewCell *cell=(UITableviewCell *)[self.effectsTableView cellForRowAtIndexPath:indexPath];
self.currSelectedRowTitle = [cell.textLabel text];
[self performSegueWithIdentifier:@"PushedByTableView" sender:self];
}
Это может сработать ...
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
cellForRow
, поэтому он должен делать то же самое вdidSelect
.