在Storyboard中以编程方式访问UIViewController

时间:2013-05-15 08:29:15

标签: iphone ios objective-c storyboard

我正在开发一个有几个ViewControllers的应用程序,并且有一个特定的ViewController“登录ViewController”,我想从几乎每个UIViewController访问它,我知道我可以通过使用segue从每个控制器到LoginViewController实现这一点我确信这不是最好的解决方案,实现这一目标的最佳解决方案是什么?

4 个答案:

答案 0 :(得分:7)

使用此...变量vc返回您要查找的viewcontroller

  UIStoryboard *aStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
  YourViewController *vc = [aStoryboard instantiateViewControllerWithIdentifier:@"YourViewController"];

答案 1 :(得分:1)

你可能会做这样的事情

static LoginViewController *instance; //place in the implementation

- (void) viewDidLoad {
     instance = self;
}

+(LoginViewController *) getInstance { //use this method to access the instance (declare in header)
    return instance;
}

然后只需导入您需要访问它的标题即可完成

答案 2 :(得分:1)

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/UsingViewControllersinYourApplication/UsingViewControllersinYourApplication.html

以编程方式实例化故事板的视图控制器

清单2-2在同一个故事板中实例化另一个视图控制器

- (IBAction)presentSpecialViewController:(id)sender {
    UIStoryboard *storyboard = self.storyboard;
    SpecialViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"SpecialViewController"];

    // Configure the new view controller here.

    [self presentViewController:svc animated:YES completion:nil];
}

答案 3 :(得分:0)

我建议您创建一个基本视图控制器,它将由需要登录视图控制器的每个控制器进行子类化。 然后在您的基本viewController中,您可以创建一个这样的方法:

-(YourLoginViewController*)giveMeTheLoginController {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryboardName" bundle:nil];
    YourLoginViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"YourLoginViewControllerIdentifier"];
    return viewController;
}

如果您不想要其他基本视图控制器,则可以在视图控制器中使用相同的方法从故事板获取视图控制器的新实例。

同样使用每个视图控制器中的segue是一种好方法,segue用于定义导航。