xcode/ios: как передавать данные при программном запуске контроллера модального представления

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

- (void) editView:(id) sender
{
    NSLog(@"pressed");
    UIStoryboard *storyBoard = self.storyboard;
    IDEditVC *secondViewController =
    [storyBoard instantiateViewControllerWithIdentifier:@"editvc"];
}

Вопрос:

Как передать индексный путь или строку таблицы, чтобы я мог рисовать правильные данные для этой записи?

Спасибо за любые предложения.


person user1904273    schedule 06.04.2015    source источник
comment
Почему вы создаете экземпляр @"editvc" дважды?   -  person Sergey Kalinichenko    schedule 06.04.2015
comment
у вас есть экземпляр secondViewController, объявите любое свойство в файле .h IDEditVC, скажем, NSString *myString. И используйте его как secondViewController.myString = yourIndexPath   -  person itsji10dra    schedule 06.04.2015
comment
Если у вас есть указатель на новый контроллер представления (что у вас есть, поскольку вы его создали), вы можете отправить ему любое сообщение, которое вам нравится, включая сообщения для установки любых данных, которые ему могут понадобиться.   -  person Caleb    schedule 06.04.2015
comment
Что вы имеете в виду под отсутствием перехода? Вы можете создать переход.   -  person Caleb    schedule 06.04.2015
comment
Я удалил две лишние строки. В раскадровке нет перехода, потому что по какой-то причине я не понимаю, детальный VC не позволяет мне добавить кнопку редактирования на панель навигации. Вот почему я программно создаю кнопку редактирования и запускаю контроллер редактирования представления. Если есть способ создать переход программно, я этого не знаю.   -  person user1904273    schedule 06.04.2015
comment
Я очень смущен и предполагаю, что вы новичок в разработке iOS. Вы передаете данные в логически созданный экземпляр viewController, как и любой другой объект, созданный в памяти... вы присваиваете значение свойства при создании экземпляра объекта. Если вы не имеете в виду фальсификацию обратных вызовов делегатов или что-то еще?   -  person TheCodingArt    schedule 06.04.2015


Ответы (1)


Самый простой способ — определить свойство в модальном VC и присвоить ему индексный путь.

- (void)editView:(id)sender
{       
    IDEditVC *secondViewController = (IDEditVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"editvc"];
    secondViewController.selectedIndexPath = yourIndexPath;
}

Где selectedIndexPath — это свойство, которое вы определили для IDEditVC, а yourIndexPath — путь индекса, который вы хотите использовать для заполнения IDEditVC

У вас есть какие-либо проблемы с переходом к этому индексному пути? Вы его где-то сохраняете?

person Andrew    schedule 06.04.2015
comment
У меня есть это в исходном контроллере табличного представления prepareforsegue, но это немного сложно, так как я использую основные данные. Там у меня есть NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; Элементы *item = [self.fetchedResultsController destViewController.item=item;objectAtIndexPath:indexPath]; Затем в подробном представлении в viewDidLoad я просто использую self.itemLabel.text = self.item.name; где имя — это свойство сущности элемента, а itemLabel — свойство в VC. Итак, на данный момент путь индекса является своего рода неявным. - person user1904273; 06.04.2015
comment
Создайте свойство для элементов в iDEditvc и после этого передайте значение, сделав объект вторым представлением controller.items = self.item - person Bhoomi Jagani; 06.04.2015