在我的应用程序中,我有一个以编程方式执行segue的按钮:
- (void)myButtonMethod
{
//execute segue programmatically
[self performSegueWithIdentifier: @"MySegue" sender: self];
}
我想知道是否有一种方法可以引用目标视图并传递一些参数。
我知道在prepareForSegue
方法中,我可以用myDestinationViewController *vc = [segue destinationViewController];
来引用它,但我不知道如何以编程方式执行segue。
你有什么想法吗?
谢谢,yassa
更新:
对不起这个问题!!!我只是发现,即使以编程方式调用segue,也会调用prepareForSegue
方法,因此可以以相同的方式传递参数。
答案 0 :(得分:105)
答案很简单就是如何触发segue没有区别。
在任何情况下都会调用prepareForSegue:sender:
方法,这是您传递参数的地方。
答案 1 :(得分:90)
老问题,但这里有关于如何做你要求的代码。在这种情况下,我将数据从表视图中的选定单元格传递到另一个视图控制器。
在trget视图的.h文件中:
@property(weak, nonatomic) NSObject* dataModel;
<。>文件中的:
@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;
}
}
答案 2 :(得分:2)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ExampleSegueIdentifier" {
if let destinationVC = segue.destination as? ExampleSegueVC {
destinationVC.exampleString = "Example"
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ExampleSegueIdentifier" {
if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
destinationVC.exampleString = "Example"
}
}
}
答案 3 :(得分:0)
我理解在一个地方执行segue并保持状态发送参数以准备segue的问题。
我找到了一种方法来做到这一点。我已经使用类别向ViewControllers添加了一个名为userInfoDict的属性。并且我也使用标识符覆盖执行segue,这样如果发送者是self(意味着控制器本身)。它会将此userInfoDict传递给下一个ViewController。
此处,您可以传递特定参数,而不是传递整个UserInfoDict,作为发送方并相应地覆盖。
你需要牢记的一件事。不要忘记在你的performSegue方法中调用super方法。
答案 4 :(得分:0)
如果你使用新的swift版本。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ChannelMoreSegue" {
}
}