为了账号安全,请及时绑定邮箱和手机立即绑定

如何传递preareForSegue:一个对象

如何传递preareForSegue:一个对象

iOS
米琪卡哇伊 2019-06-04 16:03:28
如何传递preareForSegue:一个对象我在mapview中有许多注释(与rightCalloutAccessory(按钮)。按钮将从此执行一个segue。mapview转到tableview..我想通过tableview一个不同的对象(保存数据),这取决于单击了哪个标注按钮。例如:(完全是虚构的)注释1(奥斯汀)->传递数据obj 1(与奥斯汀相关)注释2(达拉斯)->传递数据obj 2(与达拉斯相关)注释3(休斯顿)->传递数据obj 3等等.(你知道)我能够检测到哪个呼号按钮被点击了。我在用prepareForSegue*将数据obj传递给目标ViewController..由于我不能让这个调用为我所需的数据obj增加一个参数,那么有哪些优雅的方法可以达到相同的效果(动态数据obj)?任何提示都将不胜感激。
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

中获取对目标视图控制器的引用。prepareForSegue:方法,并将需要的任何对象传递到那里。举个例子.。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }}

修订:您也可以使用performSegueWithIdentifier:sender:方法来激活基于选择或按钮按下的到新视图的转换。

例如,假设我有两个视图控制器。第一个按钮包含三个按钮,第二个按钮需要知道在转换之前按下了哪些按钮。你可以把按钮连接到IBAction在您的代码中,它使用performSegueWithIdentifier:方法,像这样.。

// When any of my buttons are pressed, push the next view- (IBAction)buttonPressed:(id)sender{
    [self performSegueWithIdentifier:@"MySegue" sender:sender];}// This will get called too before the view appears- (void)prepareForSegue:
    (UIStoryboardSegue *)segue sender:(id)sender{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {

        // Get destination view
        SecondView *vc = [segue destinationViewController];

        // Get button tag number (or do whatever you need to do here, based on your object
        NSInteger tagIndex = [(UIButton *)sender tag];

        // Pass the information to your destination view
        [vc setSelectedButton:tagIndex];
    }}

编辑:我最初附加的演示应用程序现在已经六年了,所以我删除了它,以避免任何混淆。


查看完整回答
反对 回复 2019-06-04
?
忽然笑

TA贡献1806条经验 获得超5个赞

有时,避免在两个视图控制器之间创建编译时依赖关系是很有帮助的。下面是如何在不关心目标视图控制器的类型的情况下这样做:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.destinationViewController respondsToSelector:@selector(setMyData:)]) {
        [segue.destinationViewController performSelector:@selector(setMyData:) 
                                              withObject:myData];
    } }

因此,只要您的目标视图控制器声明了一个公共属性,例如:

@property (nonatomic, strong) MyData *myData;

您可以在前面的视图控制器中设置此属性,就像我前面描述的那样。


查看完整回答
反对 回复 2019-06-04
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

在SWIFT 4.2中,我会这样做:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let yourVC = segue.destination as? YourViewController {
        yourVC.yourData = self.someData    }}


查看完整回答
反对 回复 2019-06-04
  • 3 回答
  • 0 关注
  • 628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信