1

我有一個拆分視圖控制器,其中任何一方都有一個表視圖,並且每次在任何一方發生某種交互時都需要重新加載表。無論何時在分割視圖控制器的左側(主控)上選擇一個單元,我都實現了委託來更新我的詳細視圖控制器。如何在UISplitViewController的細節和主視圖控制器之間進行視圖刷新?

1.我想知道是否需要再次實現委託以使其成爲兩種方式(即更新a時的主視圖)還是有任何通用方法。

2.我已經編寫了兩個類的代碼,所以發生的是當我選擇一個左側的單元格時,通過委託方法重新加載/刷新視圖的右側更新,但是像viewWillAppear/viewDidAppear/viewWillDisapper這樣的方法。 ..等不叫。我現在從左側單元格選擇觸發的delegateMethod手動調用viewWillAppear方法。是否有一種技術我缺少,所以類方法被稱爲自動。或者你能否指出使用splitViewController的最佳方法?

回答

1

您可能需要使用UITableView的reload...方法之一來重新加載表。 reloadData方法將重新加載完整的表。如果您知道哪些行更改,那麼使用其他方法可能會更好。 如果更改也在行數中,那麼您需要使用insert...delete...方法之一來獲得適當的動畫。 查看UITableView documentation的所有細節。

對於你的第一個問題,我期望詳細視圖控制器將主人作爲代表。但是主人應該知道哪個細節視圖控制器在右邊。畢竟,他已經開始了。

2

首先,從您的代碼中調用viewWillAppear等可能不是一個好主意,因爲這些行爲將來可能會發生變化。 (例如,viewDidLoad曾經在iOS早期版本中被多次調用,現在每次調用一次)。你可以將你的代碼移動到一個單獨的方法中。

其次,你可能想看看NSNotification作爲溝通變化的一種方式。這很容易,不需要你保留任何委託指針。當一個項目被竊聽

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(updateFromDetail:) name:DETAIL_UPDATED object:nil]; 

... 

-(void)updateFromDetail:(NSNotification *)no 
{ 
    NSDictionary *nd = [no userInfo]; // get relevant information 

    // take action.... 
} 

從細節方面,:

例如,您可能添加到子視圖控制器的.h:

#define MASTER_UPDATED @"MasterUpdated" 
#define DETAIL_UPDATED @"DetailUpdated" 

,然後在主控制器類似,你會發送一條消息,如:

NSDictionary *userInfo = @{@"somekey":@"somevalue", @"anotherkey":@"anothervalue"}; 

[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED 
    object:self userInfo:userInfo]; 
+0

是的,除了代表使用通知外。 – djay

0

嗨@Divjyot我現在正在研究類似的情況,但我有在單擊單元格時更改爲不同的viewcontrolelrVIewController(SecondaryViewController),所以這就是我所做的 我創建並使用masterViewController(PrimaryViewCOntroller)中的所有viewcontroller進行數組並使用委託將其傳遞給單元格選擇的detailViewController。因此,在單擊primaryViewControlelr中的單元格時,將使用新的ViewController更新secondaryViewCOntroller。如果您想要了解更多信息,請點擊此處如何實施此評論

+1

好吧!我使用委託來從master發送updateUI到詳細信息。和反向角色的通知。我不得不同時刷新主人和細節。感謝您的洞察! – djay

相關問題