【发布时间】:2014-10-30 01:29:36
【问题描述】:
我在管理 segue 时遇到了一些困难。我的视图控制器层次结构如下:
- BHGSplitViewController(UISplitViewController 的子类)
- UINavigationController
- MasterViewController(UITableViewController 的子类)
- UINavigationController
- DetailViewController(UIViewController 的子类)
- UINavigationController
它们具有以下属性:
BHGSplitViewController:
@interface BHGSplitViewController : UISplitViewController
@property (nonatomic, strong) MasterViewController* masterVC;
@end
主视图控制器:
@interface MasterViewController : UITableViewController
@property (strong, nonatomic) MenuDataSource *menuDataSource;
@property (strong, nonatomic) DetailViewController *detailViewController;
@end
DetailViewController:
@interface DetailViewController : UIViewController
@property (strong, nonatomic) NSURL* URL;
@property (strong, nonatomic) IBOutlet UIWebView *webView;
@end
这些在我的主情节提要中通过关系segues 关联起来。
在初始应用启动后,我以模态方式显示登录视图控制器。登录后,我重新回到我的BHGSplitViewController,但我需要设置一些数据。在loginViewController 的prepareForSegue 方法中,我尝试以下操作:
BHGSplitViewController *splitVC = [segue destinationViewController];
splitVC.masterVC.menuDataSource.var = someValue;
但是,在调试时,splitVC.masterVC = nil,显然尝试对其设置值是行不通的。我如何建立和保持这些关系?
我继承了这个应用程序的一个版本,它是用故事板构建的。我猜我需要开始初始化这些属性。用故事板做到这一点的最佳方法是什么?我需要覆盖initWithCoder: 吗?我应该在viewDidLoad 中设置这些属性吗?
编辑:segue 的解释
所以,我在我的AppDelegate 中加载我的BHGSplitViewController 并将其设置为处理折叠等。之后,我需要立即显示一个模式视图以进行登录。我需要这个来像推动一样进行动画处理(但 Apple 不允许这样做),所以我试图通过使用自定义 segue 来破解我的方式(这是 hacky,我讨厌它):
现在的转场:
- (void)perform {
UIViewController *srcViewController = (UIViewController *) self.sourceViewController;
UIViewController *destViewController = (UIViewController *) self.destinationViewController;
UIView *prevView = srcViewController.view;
UIView *destView = destViewController.view;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
[window insertSubview:destView aboveSubview:prevView];
[destView enterLeft:0.1 then:^{
[srcViewController presentViewController:destViewController animated:NO completion:nil];
}];
}
解雇 Segue:
- (void)perform {
UIViewController *srcViewController = (UIViewController *) self.sourceViewController;
UIViewController *destViewController = self.destinationViewController;
UIView *prevView = srcViewController.view;
UIView *destView = destViewController.view;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
[window insertSubview:destView aboveSubview:prevView];
[destView enterRight:0.1 then:^{
[srcViewController presentViewController:destViewController animated:NO completion:nil];
}];
}
【问题讨论】:
标签: objective-c segue uisplitviewcontroller