簡體   English   中英

在Storyboard中以編程方式訪問UIViewController

[英]Accessing UIViewController programmatically in Storyboard

我正在開發一個具有多個ViewController的應用程序,並且希望從幾乎每個UIViewController都可以訪問特定的ViewController“登錄ViewController”,我知道我可以通過使用從每個控制器到LoginViewController的segue來實現此目的,確保不是最佳解決方案,實現此目的的最佳解決方案是什么?

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

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

你可能可以做這樣的事情

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;
}

然后只需將標題導入需要訪問它的位置即可

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];
}

我建議您應該創建一個基本視圖控制器,每個需要登錄視圖控制器的控制器都將其子類化。 然后在您的基本viewController中,您可以創建如下方法:

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

如果您不希望使用其他基本視圖控制器,則可以在視圖控制器中使用相同的方法從情節提要中獲取視圖控制器的新實例。

同樣,使用每個視圖控制器的segues是一種好方法,segues用於定義導航。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM