我在管理segue時遇到了一些困難。我的視圖控制器層次結構如下所示:prepareForSegue中的未初始化屬性
- BHGSplitViewController(UISplitViewController的子類)
- 的UINavigationController
- MasterViewController(的UITableViewController的子類)
- 的UINavigationController
- DetailViewController(的子類UIViewController)
- 的UINavigationController
這些具有以下性質:
BHGSplitViewController:
@interface BHGSplitViewController : UISplitViewController
@property (nonatomic, strong) MasterViewController* masterVC;
@end
MasterViewController:
@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
中設置這些屬性嗎?
編輯:賽格瑞
的解釋所以,我加載了我的BHGSplitViewController
在我AppDelegate
並設置它來處理崩塌等在那之後,我需要立即顯示登錄模態的視圖。我需要這個動畫像一個推(但蘋果不會允許),所以我試圖通過使用自定義賽格(這是哈克,我討厭它)破解我的方式:
Present Segue公司:
- (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];
}];
}
嘗試此...'self.viewcontrollers'有兩個'UINavigationController's但都是空 – oflannabhra 2014-10-30 14:45:55
@oflannabhra,你怎麼知道他們是空的? nav.topViewController的日誌是否給你零? – rdelmar 2014-10-30 15:08:06
對不起,在我分配它們的'viewDidLoad'方法中不是空的,它們在'prepareForSegue'中是空的,我試圖設置它們。我將從模態視圖返回到splitView。我認爲'prepareForSegue'正在執行,那麼splitView的'viewDidLoad'方法正在執行。更新問題的清晰度 – oflannabhra 2014-10-30 15:18:17