2011-11-19 183 views
0

在我的通用應用程序中,我有一個UIScrollView內的UIControl視圖。刷新UIView從子視圖

在按下設置按鈕,我再添查看子視圖,類似這樣的:像預期顯示

SetupController *setupview = [[SetupController alloc] initWithNibName:@"SetupView-iPad" bundle:nil]; 
[mainview addSubview:setupview.view]; 

子視圖。 在這個子視圖中,我有一些按鈕,它允許用戶在設置之間切換。 執行的操作保存在本地數據庫中。

問題是:在子視圖中的ButtonClick上,我必須刷新主視圖以應用更改。我測試過許多方法可以做到這一點:

在子視圖類:

[self.parentViewController.view setNeedsDisplay]; 

沒有結果。

然後我試圖通過通知刷新MAINVIEW:

我說這個我子視圖類文件,以改變我的設置功能。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc postNotificationName:@"setEmoticon_NOTIFICATION" object:self]; 

} 

然後,我添加觀察者到我在viewDidLoad方法MAINVIEW:

[[NSNotificationCenter defaultCenter]的addObserver:自選擇器:@selector(refreshView)名稱:@ 「setEmoticon_NOTIFICATION」 對象:無];

,並建立了功能,該觀察:「通知」

-(void)refreshView{ 
    NSLog(@"Notification!"); 

    [self.view performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES]; 

} 

在登錄我得到的在更改設置。但無論我嘗試什麼,都不要刷新。 我試過setNeedsDisplay,resignFirstResponder,[self viewDidLoad:],但仍然沒有用。

任何想法如何刷新我的主視圖?

+0

你的主要觀點是什麼樣的觀點? –

回答

0

地獄是的,好像我找到了一個解決方案,從子視圖刷新我的超級景觀。 您只需在您的子視圖控制器中將以下代碼片段添加到所需的操作/方法中,即應執行刷新。

 for (UIView* next = [self.view superview]; next; next = next.superview) 
    { 
     UIResponder* nextResponder = [next nextResponder]; 
     if ([nextResponder isKindOfClass:[UIViewController class]]) 
     { 
      [(UIViewController*)nextResponder viewWillAppear:YES]; 
     } 
    } 

在這種情況下,我重新加載上海華盈,使用它的方法viewWillAppear中。 你可以用適合你需要的任何方法(viewDidLoad,viewWillDissapear等)替換它。

這可能不是最好的方法,但它對我很好。 感謝您的回答。;)

0

什麼時候你需要做什麼時刷新?你需要在屏幕上重繪元素嗎? 你有在主視圖中實現的自定義刷新方法嗎?我會安裝在你的子畫面並添加子視圖到主視圖之前自定義協議,我想補充的子視圖的委託作爲主視圖

SetupController *setupview = [[SetupController alloc] initWithNibName:@"SetupView-iPad" bundle:nil]; 
    setupView.delegate = mainview; 
    [mainview addSubview:setupview.view]; 

然後處理在主視圖中調用刷新回來。

+0

嘿,在SubView中我選擇了一些像Image一樣的東西。 MainView必須刷新才能顯示所選圖像,並顯示大小和新的排列文字說明。爲了做到這一點,我的主視圖需要再次運行它的方法(viedDidLoad,viewWillAppear等)並重新繪製xib。我嘗試將子視圖委託設置爲像您所描述的主視圖。但是setupview.delegate = mainview似乎不起作用。 setupview可能不會響應委託,是警告。 – DevZarak