2016-04-14 49 views
1

我有兩個ViewControllers:一個& B.當用戶做出的ViewController的變化,我想作出的ViewController B.一些變化Run方法

現在我正在做這樣:對於這種變化,我在ViewController B中有特殊的功能,而在ViewController B的viewWillApear方法中,每次打開ViewController時都會運行這個func。

也許我可以更容易地執行它?

var GlobalVarB = 0 

class ViewControllerB: UIViewController { 
var localVarB = 0 

func update() { 
    if(localVarB != GlobalVarB) { 
       localVarB = GlobalVarB 
    //do something } 
} 

override func viewWillAppear() { 
    update() 
} 
} 
+0

您可以創建屬性和存儲值這個屬性。而使用它viewC B 你也可以在userdefault中保存數據 –

+0

你的意思是 - 在ViewController B中創建屬性?這就是我現在正在做的 - 也許我沒有正確解釋它。我以爲我可以在ViewController B之外運行這個方法。 – moonvader

+1

你可以使用協議 –

回答

1

您可以使用NSNotification:

在視圖控制器B添加此

- (void) viewDidLoad 
{ 

//Your rest of code then below statement 

     [[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(receiveTestNotification:) 
      name:@"TestNotification" 
      object:nil]; 
} 

- (void) dealloc 
{ 
    // If you don't remove yourself as an observer, the Notification Center 
    // will continue to try and send notification objects to the deallocated 
    // object. 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

在視圖控制器等

- (void) youMethodToFireNotification 
    { 
     // All instances observing the `TestNotification` will be notified 
     [[NSNotificationCenter defaultCenter] 
      postNotificationName:@"TestNotification" 
      object:self]; //Object here can be any changed value or you can access viewController A instance by sending self. 
    } 
+0

雖然通知中心有其有效的使用案例,但在這類問題中幾乎總是錯誤的選擇。 – Eiko

+0

@Eiko:儘管它取決於使用的偏好,因爲它不是由蘋果推薦的,我們不應該爲此目的使用NSNotification。感謝您的建議,您可以添加您的答案,以便它對我們理解有用。 – Chetan

1

您可以使用通知中心從視圖控制器A.

在視圖控制器B到執行方法創建視圖控制器B的方法做出改變按在VC A轉換併爲此notificaitonCenter在ViewController中添加觀察員B viewDidLoad/ViewWillAppear如下所示。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodName) name:@"notificationName" object:nil]; 

當您在視圖控制器A中進行更改時,請從視圖控制器A調用通知通知如下。

[[NSNotificationCenter defaultCenter]postNotificationName:@"notificationName" object:nil]; 

您還可以使用UserInfo作爲字典傳遞一些值。

希望它有幫助。

+0

儘管通知中心有其有效的使用案例,但在這類問題中幾乎總是錯誤的選擇。 – Eiko

+0

那麼這個問題有什麼可能是有效的選擇? –

+0

只需連接視圖控制器即可。設置一個屬性,調用一個方法。也許可以通過層次結構中更高級的其他實例來傳遞它。通知適用於非常罕見的情況下,直接發送信息不合適。一個組件大喊「哦,順便說一下,這個和那個發生了」,以及其他一些組件可能會或可能不會在聽這個。如果您將其用於普通消息傳遞,則會嚴重破壞某些內容。 – Eiko