2012-02-12 2 views
169

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

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

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

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

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

Спасибо, Яса


UPDATE:

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

+44

Добавить обновление в ответ и принять его так, что люди знают об этом был дан ответ :) – danielbeard

+0

Добавить ответ, комментарий для уведомления. – DanSkeel

+11

Вы должны отметить ответ [ниже] (http://stackoverflow.com/a/10783047/377384) как правильный, чтобы люди знали, что на него был дан ответ. –

ответ

104

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

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

90

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

в .h файле зрения Тргет:

@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; 
    } 
} 
0

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

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

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

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

0

В случае, если вы используете новую быструю версию.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ChannelMoreSegue" { 

     } 
}