2011-04-14 40 views
1

我在我的iPhone應用程序中創建了一個UIView。當用戶關閉或打開UIView作爲當前屏幕時,我想處理一些事情。我想,我可以在viewWillAppear:下做到這一點。但是,在UIView中不調用viewWillAppear:。它只在UIViewController上工作嗎?我如何處理viewWillAppear:viewDidAppear: UIView?iPhone:viewWillAppear不被UIView調用

更新: UIView我創建了一切通過程序,而不是.xib。

請指教。

謝謝!

+0

你如何呈現和關閉UIView?它是一些按鈕操作還是別的什麼。什麼是視圖的大小[順便說一句,這些代表方法不會被稱爲@詹姆斯已經回答]。 – Ravin 2011-04-14 16:24:37

+0

按設備主頁按鈕關閉/啓動。好的,謝謝,如果這是不可能的。我可以在用戶按Home按鈕時在「applicationDidEnterBackground」中找到當前的UIView嗎? – Getsy 2011-04-14 16:27:45

回答

5

從您的消息中,我推斷您在UIView類中編寫了您的viewWillAppear:方法。正如你懷疑的那樣,該方法是[UIViewController]1的一部分,而不是[UIView]2,因此它只在UIViewController上被調用。

您應該將UIViewController的屬性視圖連接到接口構建器中的UIView對象,然後在UIViewController中實現該方法。 如果您的視圖響應創建一個用戶操作,

更新作爲更新: 你應該標記的意見無論是在代碼(view.tag=1)或IB。 然後,您可以從您的委託中執行if (self.window.rootViewController.view.tag == 1) { ... }(假設您正在查找控制器的rootController視圖,否則發佈更多詳細信息)。 如果在一個地方定義常量而不是將1定義爲文字,則更好。

1

這些委託方法在每次超級視圖呈現給屏幕時都會調用,並且應該在UIViewControllers中實現。

問題是,當子視圖出現在屏幕上時,這些方法不會被調用,所以你的超視圖 - 視圖 - 控制器將不得不相應地響應這些事件。

你可以在this post here找到更多的信息。

1

如果你研究的UIViewUIViewController的文檔你會發現是-(void)viewWillAppear:animated:UIViewController而不是UIView的方法,所以要想使用它,它必須通過繼承UIViewController實現。通常,對於最佳實踐,如果您想遵循MVC,那麼與視圖本身無關的任何功能都應委派給視圖控制器,而不應位於您的子類的主體中。

使用xib文件創建一個新的視圖控制器,然後將自定義視圖類鏈接到xib文件中的視圖。