将信息传递给storyboard上的viewcontroller

时间:2014-06-29 12:45:14

标签: ios xcode uiviewcontroller uinavigationcontroller storyboard

我使用故事板并且面对这种情况:uinavigationcontroller包含一个视图控制器(根控制器),其中包含十个按钮,每个按钮通过故事板连接到同一个视图控制器。

第二个视图控制器的行为取决于在第一个视图控制器中点击的按钮,但是如何识别点击哪个按钮(如标记值)并将此信息传递给第二个视图控制器?

谢谢。

2 个答案:

答案 0 :(得分:1)

再加上丹尼尔的回答:

首先,将一个公共属性添加到可从第一个VC访问的第二个VC:

@interface SecondViewController : UIViewController 

@property (nonatomic) int buttonTagClicked;

@end

您需要在UIButtons上设置标签。这可以在故事板中完成,也可以在代码中以编程方式完成。我会创建一个每个按钮链接到的通用IBAction。您可以稍后通过sender参数从按钮中提取标记。

- (IBAction)buttonClicked:(id)sender
{
  [self performSegueWithIdentifier:@"pushSegue" sender:sender];
}

相关联
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"pushSegue"]) {
    SecondViewController *destinationVC = (SecondViewController *)[segue destinationViewController];
    UIButton *selectedButton = (UIButton *)sender;
    destinationVC.buttonTagClicked = selectedButton.tag;
  }
}

答案 1 :(得分:0)

您可以为每个连接设置segueIdentifier。然后在ViewController中,您可以根据您设置的标识符触发操作。

e.g:

如果您在故事板中选择了连接,则可以将其命名为:

enter image description here

在ViewController中,您可以根据标识符触发操作,如下所示:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"segue1"]) {
        UIViewController *destinationVC = [segue destinationViewController];
        destinationVC.property = ...;
    }
}