簡體   English   中英

重裝View iPhone

[英]Reloading A View iPhone

所以我有兩個視圖A和B。A是個人資料視圖,B是登錄視圖。 A使用以下方法在ViewDidLoad方法中加載B

LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]]; //make new instance of LoginViewController
        [self presentModalViewController:lvc animated:NO]; //present the LoginViewController
        [lvc release];

在登錄視圖中,如果登錄成功,則刪除該視圖

[self dismissModalViewControllerAnimated:YES];

在登錄視圖上,它下載一些我想顯示在配置文件視圖上的數據。 我將如何將數據發送到配置文件視圖並將其顯示在xib中。 我相信個人資料視圖已經顯示,但是只是隱藏的。

您在下載數據而不是ViewDidLoad之后加載視圖A。

當您單擊登錄按鈕然后下載數據並顯示它時。 如果您的viewWillAppear沒有調用,則創建nsnotification中心對象,並在您要調用視圖willAppear方法時將其發布。然后刪除此通知。

這是一個基本的“兩個班級之間的交流”問題。 有很多方法可以做到這一點,但是這里有三種。 我只編寫了示例代碼來進行委派(因為我認為這可能是您所處情況的最佳選擇),但是如果您需要通知或KVO示例,請告訴我。

委派在A類中實現委派或回調方法。委派最適合小型類層次結構。 如果A類是唯一將加載B的類,而A是唯一一個關心B中發生的事情的類,則委派是移動數據的最簡單方法。 它很容易實現,很容易理解,並且類之間有明確的關系。

// Class A
- (void)displayLoginViewController {
    LoginViewController *lvc = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]];
    lvc.delegate = self;
    [self presentModalViewController:lvc animated:NO]; //present the LoginViewController
    [lvc release];
}

- (void)loginViewControllerWasSuccessfull:(LoginViewController *)loginViewController {
    // Do whatever you need to do here
    [self dismissModalViewControllerAnimated:YES];

}

在登錄視圖控制器中,在標題中執行以下操作:

@property (assign) NSObject delegate; // declared assign so you don't have circular references

…在執行中:

- (void)didLogin {
    [self.delegate loginViewControllerWasSuccessfull:self];
}

通知類A將注冊以偵聽登錄通知。 B類將發布登錄通知。 如果關心登錄的類是分布式的,則通知是最好的。 即,有許多類關心登錄事件,它們不一定與執行登錄的類有直接關系。

如果您不特別在乎登錄事件,而是在乎數據更改,那么關鍵值觀察 KVO就是最好的選擇。 您將擁有一些用於管理數據的NSManagedObject如果您使用的是Core Data,則可能是一個NSManagedObject A類將觀察到它感興趣的任何屬性的更改LoginViewController在完成數據下載后將更新該數據類。 將通知A類數據已更改。

無論您決定使用哪種解決方案,最終的選擇都取決於詢問“ A類在乎什么?”。 A類是否需要知道B類已成功登錄? 使用委托。 A類是否需要知道某個地方已登錄某個類? 使用通知。 A類是否不在乎登錄,只需要知道數據是否已更改? 使用KVO。

您可以將下載的數據存儲在登錄視圖中的委托文件中。 在配置文件視圖的viewWillAppear方法中,使用委托中的數據。

為此,您必須在.h和.m文件中創建變量並將其屬性設置為.than,您可以在登錄屏幕中設置此變量值,它將合成為配置文件屏幕。

您必須在appDalegate中創建變量的另一種方法 在登錄屏幕中設置的appDalegate值,並在配置文件屏幕中使用此值

如果我理解正確,則您正在嘗試執行與Android的意圖相同的任務。 因此,我建議使用iOS的NSNotificationCenter並發送帶有相關數據的NSNotifications。

暫無
暫無

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

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