创建ViewController的单例对象

时间:2016-10-25 06:03:58

标签: ios objective-c uiviewcontroller singleton uistoryboard

致电[self performSegueWithIdentifier:@"popvc2id" sender:self];后,我的ViewController2将通过awakeFromNib方法进行初始化。

我想使用singleton object of ViewController2

创建storyboard

我该怎么做?

2 个答案:

答案 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];