我有一個應用程序需要在按下view controller
2中的button
時在視圖控制器1中更改菜單。達到此目的的最佳方法是什麼?有沒有簡單的方法讓另一個ViewController知道按鈕已被按下?
我聽說過很多關於NSNotification
的討論,但我認爲這是爲了顯示警報?
我有一個應用程序需要在按下view controller
2中的button
時在視圖控制器1中更改菜單。達到此目的的最佳方法是什麼?有沒有簡單的方法讓另一個ViewController知道按鈕已被按下?
我聽說過很多關於NSNotification
的討論,但我認爲這是爲了顯示警報?
執行此操作的「正確」方法是將新狀態寫入應用程序的數據模型中。當另一個視圖控制器變爲活動狀態時,它應根據模型所說的內容更新其視圖。這樣,即使信息在用戶進行更改時不存在,該信息也可供其他視圖控制器使用。
通知是一種將信息傳遞給其他對象的好方法,無需特別瞭解它們,但通知僅在發送時關注它的對象存在時纔有效。
我會採用這種方法,讓模型發送一個已經改變的通知。第二個視圖控制器觀察通知並更改其狀態。 – Raymond 2013-04-25 06:50:34
你在錯誤地思考這個問題。一個視圖控制器不應該關心在另一個視圖控制器中發生了什麼。
如果點擊某個按鈕會導致菜單內容發生變化,這聽起來像是在更改數據。按下按鈕應告訴模型層可用選項已更改,另一個視圖控制器應將可用選項從模型層加載到菜單中。
我聽說過很多關於NSNotification的討論,但我認爲這是爲了顯示警報?
不,它用於以不會將這些部分耦合在一起的方式將有關事件的信息分發給應用程序的其餘部分。這不是與用戶交互。
因此,當VC2中的按鈕被點擊時,VC1中菜單的大小會發生變化。如果我是正確的,這應該全部在控制器中處理? – Jam 2013-04-25 08:57:20
NSNotification
是一種方法來做到這一點,不,它與警報無關。
它的工作原理是這樣的:「生產者」可以發佈(發送)通知。其他對象可以訂閱通知並對通知作出反應。這是分離對象的絕佳方式(目標通常是儘可能少地讓每個對象知道其他對象的信息)。
搜索NSNotification tutorial
,有不少。你應該真的熟悉它們,它們在iOS和Mac OS X開發中使用很多,因爲它們非常非常方便。
如果您不同時提交兩個viewcontroller並且您從viewcontroller1轉換到viewcontroller2,則可以使用segues將信息從vc1傳遞到vc2。我認爲通知很棒,但我認爲沒有必要。
在NSNotification和UILocalNotification(或推送通知)中使用「通知」是非常不幸的,但是它們沒有任何關係。 – matt 2013-04-24 19:26:25
哦,還有一件事:當你「聽到很多關於某事的談話」,並且你想更多地瞭解它,請嘗試*閱讀文檔*。你甚至*看過NSNotification/NSNotificationCenter的文檔嗎?我不是說這是最好的解決方案,但我確實說不需要無知。該文檔就在您的計算機上。 – matt 2013-04-24 19:28:53