以编程方式执行Segue并将参数传递到目标视图

yas*_*sin 173 parameters view storyboard ios segue

在我的应用程序中,我有一个按编程方式执行segue的按钮:

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

我想知道是否有一种方法可以引用目标视图并传递一些参数.

我知道在prepareForSegue方法中,我可以用:来引用它myDestinationViewController *vc = [segue destinationViewController];,但我不知道如何以编程方式执行segue.

你有什么想法?

谢谢,亚萨


更新:

对不起这个问题我很抱歉!我只是发现,即使以编程prepareForSegue方式调用segue,也会调用该方法,因此可以以相同的常规方式传递参数.

tra*_*per 105

答案很简单就是如何触发segue没有区别.

prepareForSegue:sender:在任何情况下都会调用该方法,这是您传递参数的地方.

  • 这仍然困扰着我 - 这意味着我必须在一个地方触发 segue,在那里我有我想作为参数发送的数据,与其他任何东西很好地隔离,但是要在一个完全不同的地方添加这些数据 - prepareForSegue,我们在那里对需要传递的数据一无所知。意思是,我必须在由两个不同函数(一个触发转场,另一个 - 准备)共享的上下文中使用相关数据创建一个状态。当我只需要用一些数据打开一个新视图时,我不想弄脏状态...... (3认同)

小智 90

老问题,但这里是如何做你要求的代码.在这种情况下,我将数据从表视图中的选定单元格传递到另一个视图控制器.

在trget视图的.h文件中:

@property(weak, nonatomic)  NSObject* dataModel;
Run Code Online (Sandbox Code Playgroud)

在.m文件中:

@synthesize dataModel;
Run Code Online (Sandbox Code Playgroud)

dataModel可以是string,int或者在这种情况下它是一个包含许多项目的模型

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }
Run Code Online (Sandbox Code Playgroud)

要么...

- (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;
    }
}
Run Code Online (Sandbox Code Playgroud)