В UITableView для отправки на контроллер детального представления, что бы я ни делал, prepareForSegue
не может получить выбранную строку. Я пытался:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Но это ноль. Я пытался:
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Дело в том, что отправитель выходит, как я вижу из журнала:
Sender is <ARASpecialCell: 0x75cd6d0; baseClass = UITableViewCell; frame = (0 44; 320 44); text = 'Late Night'; autoresize = W; layer = <CALayer: 0x75c98c0>>
Специальная ячейка возникла из-за того, что я попытался создать подкласс ячейки и добавить общедоступное свойство, но у меня возникли проблемы с доступом к нему.
Я попытался просто получить текстовую метку и использовать ее, но возникла ошибка:
"property "textlabel" not found on object of type '__strong id'"
Я попробовал «выбранную строку в индексном пути», чтобы загрузить следующий контроллер представления, но контроллер подробного представления настроен из другого на раскадровке, и было бы беспорядочно перенастраивать.
В этом TableViewController нет ничего особенного. Будем признательны за любые предложения о том, что идет не так.
1 ответ
Вам нужно @property в вашем контроллере, где вы сохраните выбранный элемент. Например, вы выбираете ячейку и в didSelectCellAtIndexPath
сохраняете соответствующий объект данных в свойстве selectedItem. Затем вы должны вызвать segue, который вы создали в конструкторе интерфейсов.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.selectedItem = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"Item Details Segue" sender:self];
}
А затем в вашем performSegueWithIdentifier вы можете делать все, что хотите, с вашим selectedItem:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"News Details Segue"])
{
NewController *controller = segue.destinationViewController;
NewController.item = self.selectedItem;
}
}
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
didSelectARowAtIndexPath
, что забыл, что все еще необходимо вызвать его, чтобы получить путь индекса . 2) Возможно, я допустил ошибку 1, потому чтоdidSelectARow...
не был вызван, потому что я подключил segue непосредственно к ячейке табличного представления. Я вижу в этом определенные преимущества: создание полностью настраиваемого меню с табличным представлением не было интуитивно понятным. Крепление к столу зафиксировало.