2012-01-24 91 views
22

在故事板之前,我可以通过将插座拖放到课程来设置代表和数据源。通过故事板,我不能将插座拖到另一个视图控制器;没有目的地会回应它。故事板 - 设置代表

如果我点击一个视图控制器对象,我可以在底部看到类的所有者,但只要我选择包含插座的其他视图控制器,旧的选择不见了,所以我无法连接二。

这是苹果的方式来说我们只应该以编程方式连接它们吗?

回答

27

正确。在您的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; 
    } 
} 
+3

如何设置UISplitViewController的委托?我看到的示例代码通过获取窗口的根视图控制器来处理它,如下所示:'UISplitViewController * splitViewController =(UISplitViewController *)self.window.rootViewController;'虽然技术上是正确的,它的工作原理,它似乎是一个真正的与代理和视图控制器设置在故事板之前的不错方式相比,这是一种肮脏的方法... –

0

如果你的故事板赛格瑞目的地 - 视图 - 控制器是一个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; 
    } 
}