在 Storyboard 之前,我可以通过将一个出口拖到一个类中来设置委托和数据源。使用故事板,我无法将插座拖到另一个视图控制器;没有目的地会响应它。
如果我点击一个视图控制器对象,我可以在底部看到类所有者,但是一旦我选择另一个包含插座的视图控制器,旧的选择就消失了,所以我无法连接两者。
这是 Apple 的说法,我们应该只以编程方式连接它们吗?
在 Storyboard 之前,我可以通过将一个出口拖到一个类中来设置委托和数据源。使用故事板,我无法将插座拖到另一个视图控制器;没有目的地会响应它。
如果我点击一个视图控制器对象,我可以在底部看到类所有者,但是一旦我选择另一个包含插座的视图控制器,旧的选择就消失了,所以我无法连接两者。
这是 Apple 的说法,我们应该只以编程方式连接它们吗?
正确的。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;
}
}
如果您的故事板 segue 目标 View Controller 是 UIViewController ,那么@Marco 的答案是正确的。但是,如果您的目标 View Controller 是 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;
}
}