【问题标题】:Pass info to viewcontroller on storyboard将信息传递给情节提要上的视图控制器
【发布时间】:2014-06-29 12:45:13
【问题描述】:

我是使用故事板的新手,我正面临这种情况:uinavigationcontroller 包含一个视图控制器(根控制器),其中包含十个按钮,每个按钮通过故事板链接到同一个视图控制器。

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

谢谢。

【问题讨论】:

    标签: ios xcode uiviewcontroller uinavigationcontroller storyboard


    【解决方案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;
      }
    }
    

    【讨论】:

      【解决方案2】:

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

      例如:

      如果您在情节提要中选择您的连接,您可以为其命名:

      在您的 ViewController 中,您可以触发基于标识符的操作,如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2016-02-15
        • 2012-09-15
        相关资源
        最近更新 更多