Выполните программную реализацию Segue и передайте параметры в режим назначения

в моем приложении У меня есть кнопка, которая выполняет программный вызов:

- (void)myButtonMethod
{
    //execute segue programmatically
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}

Я хотел бы знать, есть ли способ ссылаться на представление назначения и передавать ему некоторые параметры.

Я знаю, что в методе prepareForSegue я могу ссылаться на него с помощью: myDestinationViewController *vc = [segue destinationViewController];, но я не знаю, как это выполнить программным образом.

Есть ли у вас идеи?

Спасибо, yassa


UPDATE:

Прошу прощения за этот вопрос!!! Я просто обнаружил, что даже если segue вызывается программным способом, метод prepareForSegue вызывается в любом случае, и поэтому можно передавать параметры одним и тем же обычным способом.

Ответ 1

Ответ просто заключается в том, что не имеет значения, как срабатывает segue.

Метод prepareForSegue:sender: вызывается в любом случае, и здесь вы передаете свои параметры.

Ответ 2

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

в .h файле представления trget:

@property(weak, nonatomic)  NSObject* dataModel;

в файле .m:

@synthesize dataModel;

dataModel может быть string, int, или как в этом случае это модель, которая содержит много элементов

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }

OR...

- (void)someMethod {
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
    [self.navigationController pushViewController: myController animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) {
        UITableViewCell *cell = (UITableViewCell *) sender;
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]];
        StoryModel *storyModel = [[StoryModel alloc] init];
        storyModel = storiesDict;
        StoryDetails *controller = (StoryDetails *)segue.destinationViewController;
        controller.dataModel= storyModel;
    }
}

Ответ 3

Я понимаю проблему выполнения segue в одном месте и поддерживаю состояние отправки параметров в режиме подготовки к segue.

Я понял способ сделать это. Я добавил свойство, называемое userInfoDict, в ViewControllers, используя категорию. и я переопределяю выполнение segue с идентификатором тоже, таким образом, что если отправитель сам (означает сам контроллер). Он передаст этот userInfoDict на следующий ViewController.

Здесь вместо передачи всего UserInfoDict вы также можете передать определенные параметры, как отправитель и переопределить соответственно.

1 вещь, которую вы должны иметь в виду. не забудьте вызвать метод super в методе ur performSegue.