致电[self performSegueWithIdentifier:@"popvc2id" sender:self];
后,我的ViewController2
将通过awakeFromNib
方法进行初始化。
我想使用singleton object of ViewController2
storyboard
我该怎么做?
答案 0 :(得分:1)
我不认为这是好习惯。 但是,如果您想从视图控制器中获取一个实例,则可以在视图控制器中为视图提供标记,或者使用故事板ID,然后您可以使用访问器方法访问它。 此访问方法为您启动控制器并将其保存在字典中,下次调用它时,它将为您返回保存的实例。
就像那样:
+(yourviewcontrollerclassname *)getViewController{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
yourviewcontrollerclassname * vc;
if (![_viewControllers containsObject:@"vc-identifier"]){
vc = (yourviewcontrollerclassname *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"];
[_viewControllers setObject:vc forKey:@"vc-identifier"];
}else{
vc = (yourviewcontrollerclassname *)[_viewController objectForKey:@"vc-identifier"];
}
return vc;
}
答案 1 :(得分:0)
这里SyncViewController
是我的单身ViewController。我需要显示当前的Sync进度,所以每次用户想要查看同步进度时我都不需要初始化ViewController。
SyncViewController.m
中的
static SyncViewController *sharedInstance;
以下是获取ViewController的sharedInstance的方法。
+ (SyncViewController *)sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
sharedInstance=[storyboard instantiateViewControllerWithIdentifier:@"SyncViewController"];
});
return sharedInstance;
}
从另一个View Controller打开Singleton ViewController:
SyncViewController *syncVC=[SyncViewController sharedInstance];
[self presentViewController:syncVC animated:YES completion:nil];