簡體   English   中英

從模態(objective-c)引用視圖控制器

[英]Reference presenting view controller from modal (objective-c)

我有一個導航堆棧包括:

UINavigationViewController
 -> WelcomeViewController
 -> RoleViewController

我想在Welcome和Role之間添加一個模態viewcontroller。 我通過故事板添加一個ModalViewController,並從WelcomeViewController中的一個按鈕為ModalViewController分配一個segue(Present Modally)。 一切都很好,模態很好。

現在我在ModalViewController里面, 我想解除模態並從Welcome to Role 執行原始的segue 我在StackOverflow上做了一些搜索,並找到了如何做到這一點的不同看法。 這里列出了最合乎邏輯的方法: Dismissviewcontroller並執行segue

UIViewController *parentController = self.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^(void){
    [parentController performSegueWithIdentifier:@"segue_gotoRole" sender:self];
}];    

模態被解雇但是segue沒有被執行而應用程序崩潰了:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Receiver (<NavigationViewController: 0x78b96b80>) has no segue
with identifier 'segueToRole''

所以self.presentingViewController的目標是UINavigationViewController,而不是實際呈現模態的視圖控制器WelcomeViewController。 為了成功,我需要找到一種方法來獲取在故事板中定義的呈現視圖控制器作為模式內的segue創建者

我已經嘗試了很多不同的組合,例如self.parentViewController,self.presentationViewController,我甚至試圖遍歷導航堆棧以單獨輸出WelcomeViewController並將其專門定位為執行segue的對象,但似乎沒什么上班。

請幫我。 :)

如果是我,我會寫一個delegate protocol在這里Modal VC ,你提出並WelcomeViewControllerdelegate -一旦它被駁回,則WelcomeViewController可以接管和原因請看RoleViewController

我所做的是將演示者引用發送給呈現的實例。

這可以通過在所呈現的類中設置呈現類引用的屬性來實現。

例如,

@property (strong, nonatomic) PresentingClass *presenter;

然后,在呈現類實現中

presentedClass.presenter = self;
[self presentViewController:presentedClass animated:YES completion:nil];

最后,在提出的實現中,只需調用即可

if(presenter){
  [presenter foo];
}

有幫助。 讓我知道。

暫無
暫無

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

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