在故事板,视图和传递数据

时间:2011-10-21 22:16:01

标签: storyboard xcode4.2

在我的Xcode 4.2故事板中,我有2 UIViewControllersThis one timeIn band camp

  • This one time中,我有一个UIButton,上面有“愚蠢的名字”
  • In band camp中,我有UILabel,其上带有“标签”

考虑到我们正在处理2个单独的类 AND ,我们使用storyboards Xcode 4.2 中(通过segue设置视图之间的转换) )如何将视图控制器This one time中的“愚蠢名称”传递给视图控制器In band camp中的标签?“

enter image description here

2 个答案:

答案 0 :(得分:19)

  1. 将故事板中segue的标识符设置为“AwesomeSegue”
  2. 实施prepareForSegue方法
  3. 在方法内部,检查segue的标识符是否与“AwesomeSegue”匹配 - 如果是,请使用destinationViewControllerObject

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([segue.identifier isEqualToString:@"AwesomeSegue"]) {
            InBandCampViewController *ibcVC = [segue destinationViewController];
            ibcVC.yourData = self.someStuff;
        }
    }
    

答案 1 :(得分:0)

我必须为我的代码做一次调整,并且在使用此解决方案时也是另一种选择。

在我的情况下,我的中间有一个导航控制器中断。 MainViewController Segue 指向导航控制器,然后还有另一个 Segue 指向 SecondViewController

因此,如果您需要从导航控制器获取 ViewController ,则可以使用此类代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // ScoreViewController Storyboard Segue
    if ([segue.identifier isEqualToString:@"AwesomeSegue"]) {

        // Finding ViewController that is needed in Navigation Controller
        UINavigationController *navigationController = segue.destinationViewController;
        ScoreViewController *scoreViewController = [[navigationController viewControllers] objectAtIndex:0];

        // Bellow implement your delegate or any data you want to pass
    }
}

代表
scoreViewController.delegate = self;

传递数据
scoreViewController.newLabel.text = self.oldLabel.text;

通话方法
[scoreViewController updateLabelText:self.oldLabel.text];

顺便说一句,传递数据时,您应该直接从 Sugue 将其分配给IBOutlet
如果您只是传递NSString(或其他任何内容),并尝试将其文字分配到UILabel中的viewDidLoad,则会Nill。 这是因为viewDidLoad是在 Segue 之前实施的 使用viewDidAppear也没有帮助,因为它会在 SecondViewController 呈现给屏幕后加载文本。您可能会看到UILabel文本如何从“标签”更改为“愚蠢的名称”。

好吧,如果有人提出一些建议,我很高兴听到,因为我也只是一个新手。