簡體   English   中英

退出Popover並重新加載parentViewController

[英]Dismissing Popover and reload parentViewController

我實際上是開發iOS應用程序的新手。 我目前正在開發一個iPad應用程序,其中有兩個UIViewController(A和B)。 A是我的父視圖控制器,而B是我的UITableView彈出窗口,它不覆蓋整個A。

在B處選擇行之后,我設法撤消了B,但它不反映對A所做的更改。我如何重新加載父視圖,或者是類似android的onResume方法。 還是解決這個問題的方法。

請向我提供一些指示,已經被困了幾個小時。 謝謝

這取決於實際情況。 我建議2種方式:

  1. 如前所述,您可以建立一個委托機制,以便控制器B可以在控制器A上調用-reloadData東西。這是緊密的耦合,但可以解決您的問題。

  2. 您可以從控制器B發布NSNotification ,然后在控制器A中偵聽它。在控制器B中:

     - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Do your logic here [[NSNotificationCenter defaultCenter] postNotificationWithName:@"SettingsSavedNotification" object:nil]; // Dismiss B controller } 

    在控制器A中:

     - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveSettingsSavedNotification:) name:@"SettingsSavedNotification" object:nil]; // Proceed with controller/view setup } - (void)didReceiveSettingsSavedNotification:(NSNotification *)notification { // Reload data here } 

    不要忘記在控制器A拆卸中調用-removeObserver:name:object:

使用– popoverDidClose: NSPopover類委托方法,用於更新數據,或者您可以使用可可綁定。

兩件事情:

1)您要確保您是用於顯示彈出視圖控制器“ B”的UIPopoverController的委托。 在此處查看文檔: https : //developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html

然后,您將要實現這些方法之一,例如:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    // Reload my view controller "A"
}

2)您如何知道在視圖控制器B中選擇了哪一行? 您可能正在更新兩個視圖控制器都可以訪問的某些單例,但是更好的設計模式可能是創建您自己的協議,並使視圖控制器“ A”遵守該協議。 在那種情況下,視圖控制器B應該具有weak delegate屬性,當用戶選擇一行時,它會向其發送消息。 只需查看另一個使用委托/協議模式的類以了解其工作原理,您甚至可以通過CMD +單擊類名,或CMD + Shift + O到文件名來查看UIPopoverController的.h文件。

您只能使用- (void)viewWillAppear:(BOOL)animated嗎?

暫無
暫無

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

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