2012-04-04 35 views
0

任何幫助,將不勝感激。請注意,一個視圖是從一個viewController外部加載

我正在尋找一種方法,以編程方式通知從該viewController的外部加載視圖。

比方說,我的主視圖有5個按鈕,在視圖加載後,按鈕出現後,我想在另一個文件(在該viewContrller外)通知它已加載。如何/在哪裏可以檢查並得到通知?

我需要做一些面向方面的編程嗎?

+0

這是可能不添加/更改該視圖控制器的源代碼中的任何東西。我想跟蹤的所有代碼更改都應該在控制文件中的viewController之外進行編碼。 – ramo 2012-04-04 20:52:01

+0

您可以使控制對象成爲另一個對象內部屬性更改的觀察者。我已經更新了我的解釋答案。 – 2012-04-04 21:19:07

回答

2

使用NSNotificationCenter。你可以在類之間進行通信。

0

在您的其他對象中偵聽自定義NSNotification。讓視圖控制器在其生命週期的任何部分最有意義的時候發佈該通知(viewDidLoad,viewDidAppear ...)。

如果您不能發佈通知,那麼觀察keyPath可能是一條路。例如,你可以把這樣的事情在你的控制目標,然後實現observeValueForKeyPath:

[viewController addObserver:self 
       forKeyPath:@"view" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
0

NSNotificationCenter或委託方法是完成這一任務的最合適的方式。

0

雖然您可以使用其他人建議的通知或KVO來做到這一點,但這強烈地暗示了設計問題。你不應該直接訪問視圖控制器的內部視圖。所以更深層次的問題是:你爲什麼想知道?

根據我的經驗,最可能的原因是您讓其他對象設置標題或修改已啓用。這打破了MVC,並導致你可能試圖解決的問題。處理這個問題的正確方法是將數據放入各個視圖控制器之間共享的模型對象中。當前視圖控制器可以觀察模型上的更改並適當地更新其UI元素。

+0

我正在尋找一種通過編程方式通知從該視圖外部加載視圖的方式。 我明白,爲了在類之間進行通信,我可以使用NSNotificationCenter,或使用委託方法或標記視圖等。但我不想在視圖控制器的源代碼中更改任何內容。我想讓外界知道像圖書館或框架管理這件事。到目前爲止,我所有的搜索都沒有那麼有用,看起來像Objective-C中有一些面向方面的編程,我可能需要看看。 – ramo 2012-04-04 21:34:00

+0

你能解釋爲什麼你想訪問視圖控制器的私人信息(它的視圖,它是唯一負責管理的)?打破MVC會傾向於咬你可可。您在此使用的工具是KVO(關鍵值觀察),但它強烈地表明設計問題。 – 2012-04-04 21:46:53

相關問題