故事板 - 设置代理

23
在使用Storyboard之前,我能够通过将一个outlet拖动到类中来设置代理和数据源。但是在使用Storyboard后,我无法将这个outlet直接拖到另一个视图控制器上,因为没有可以响应它的目标。
如果我点击一个视图控制器对象,我会看到底部的类所有者,但是当我选择包含outlet的其他视图控制器时,旧的选择就消失了,所以我无法连接这两个对象。
这是否就是苹果公司暗示我们只应该通过编程来实现它们之间的连接的方式?
2个回答

29

没错。在你的prepareForSegue:sender: 方法中设置代理或其他数据。以下是一个例子:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Check the segue identifier
    if ([segue.identifier isEqualToString:@"showDetail"])
    {
        // Get a reference to your custom view controller
        CustomViewController *customViewController = segue.destinationViewController;

        // Set your custom view controller's delegate
        customViewController.delegate = self;
    }
}

4
如何为 UISplitViewController 设置委托?我查看的示例代码通过以下方式访问窗口的根视图控制器来处理它:UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 尽管这个方法在技术上是正确的且有效,但与使用故事板之前设置委托和视图控制器的优雅方式相比,它似乎是一种非常不好的方法。 - Dan F

0
如果您的故事板(segue)目标视图控制器是一个UIViewController,那么@Marco的答案是正确的。但是,如果您的目标视图控制器是一个UINavigationViewController,则必须从UINavigationViewController获取UIViewController:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Check the segue identifier
    if ([segue.identifier isEqualToString:@"chooseCategoryType"])
    {
        // Get a reference of your custom view controller if your segue connection is an UIViewController
        // CustomViewController *customViewController = segue.destinationViewController;
        // Get a reference of your custom view controller from navigation view controller if your segue connection is an UINavigationViewController
        CustomViewController *customViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];

        // Set your custom view controller's delegate
        customViewController.delegate = self;
    }
}

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