使用UINavigationViewController,我該如何找出哪些視圖已經出現?如何判斷視圖是否通過彈出顯示?
視圖或者以簡單的方式出現,作爲UINavigationController堆棧中的第一個視圖。或者它已經出現,因爲第二種觀點已經出現,第一種觀點再次顯現。你怎麼知道發生了哪些事情?
使用UINavigationViewController,我該如何找出哪些視圖已經出現?如何判斷視圖是否通過彈出顯示?
視圖或者以簡單的方式出現,作爲UINavigationController堆棧中的第一個視圖。或者它已經出現,因爲第二種觀點已經出現,第一種觀點再次顯現。你怎麼知道發生了哪些事情?
唯一可靠的方式做到這一點,據我所知,是繼承的UINavigationController和覆蓋UINavigationBarDelegate methods:
– navigationBar:shouldPushItem:
– navigationBar:didPushItem:
– navigationBar:shouldPopItem:
– navigationBar:didPopItem:
不要忘記調用super
,當然。
根據您瞭解差異的原因,還可以在受影響的視圖的viewWillAppear/viewWillDisappear方法中操作變量。
簡單的方法是向您的RootViewController添加一個屬性,以跟蹤它是否將另一個視圖推送到navigationController。
-(BOOL)hasPushedSecondView;
在init方法中初始化爲NO。
之前推secondViewControllers查看壓入堆棧,更新屬性爲YES。
在viewWillAppear中,檢查值,並相應地更新您的看法。根據您希望應用程序的行爲方式,您可能需要將hasPushedsecondview屬性重置爲NO。
根據應用程序的編寫方式和確定視圖的顯示方式,您可以查看leftBarButtonItem或backBarButtonItem。如果它在上面,除非你有一個自定義的leftBarButtonItem,那裏就不會有對象。
您可以通過一對夫婦在您的UIViewController子類方法直接決定了這一點。
有時,它可能是有用的知道爲什麼一個觀點是出現或消失 。例如,你可能想知道一個視圖 是否出現,因爲它只是添加到一個容器或是否 出現,因爲這掩蓋它刪除了一些其他內容。當使用導航控制器時,經常出現這個特殊的例子; 您的內容控制器的視圖可能會出現,因爲視圖控制器 剛剛被推入導航堆棧,或者它可能會出現,因爲其上方的控制器 已從堆棧彈出。
UIViewController類提供了您的視圖控制器可以調用的方法來確定外觀更改發生的原因。
從有關'delegate'屬性的UINavigationBar'文檔中:「如果導航欄由導航控制器創建並由該對象管理,則不得更改此屬性的值。導航控制器充當他們創建的導航欄的代表。「 – 2010-07-06 12:00:29
感謝您的澄清。我刪除了我的評論。 – falconcreek 2010-07-06 12:20:03