在视图控制器之间传递变量

12

我正在使用这个函数在 Xcode 4.3 中切换视图。

[self performSegueWithIdentifier:@"NextView" sender:self];

我想在页面之间传递一些参数,我应该如何做到这一点?


你尝试使用导航控制器了吗?它非常简单,可以传递值。 - WaaleedKhan
不,我没有尝试过导航控制器。我在故事板中使用普通按钮和转场。 - Bob
3个回答

39

performSegueWithIdentifier:sender:执行后,您的视图控制器会调用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

假设您的新视图控制器有一些属性需要设置:

if ([[segue identifier] isEqualToString:@"NextView"]) {
    MyViewController *myVC = [segue destinationViewController];
    myVC.propertyToSet = // set your properties here
}

所以,我按照你说的设置了属性,那么我怎样才能读取该属性的值呢?另外,如果我需要将多个变量传递到下一个视图,该怎么办? - Bob
对于多个变量,请使用多个属性,并且要从属性中读取,请使用... = self.property(在您定义该属性的视图控制器中) - Pfitz
我理解,但我不确定如何在“NextView”中获取那些数据。 - Bob
沿着Pfitz的方法,我在我的目标视图控制器中创建了一个方法来处理任何初始化或自定义。例如,在Pfitz的示例中,将myVC.propertyToSet替换为[myVC setProperty1:self.property1 viewTitle:@"My Title" delegate:self]; - johnnyspo
好的,我明白了。我只是有点困惑如何在NextView中访问该变量。我应该定义一个同名的属性,它会自动设置吗? - Bob
在NextView中,使用self.property,例如self.title。 - Pfitz

5

1
是的,那个页面上解释得很好,但他们使用pushViewController进行视图更改,而我想使用performSegueWithIdentifier。 - Bob

3
这是Pfitz的答案,但我举了一个例子来更容易理解Objective-C的新手:

  1. In your destinationViewController.h file add property setting for variable to 'receive' value from your source controller.m file

    @property (nonatomic) int billIdReceivingVote;
    
  2. Import your destinationViewController.h to your sourceViewController.m file:

    // VOLViewController.m
    #import "VOLVoteViewController.h
    
  3. Add prepareForSegue method to your sourceViewController.m file and pass the variables

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        VOLVoteViewController *myDestinationViewController = [segue destinationViewController];
    
        // myDestinationViewController.variable = sourceViewController variabe
        myDestinationViewController.billIdReceivingVote = [self.idOfBillSelected intValue];
    }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接