2010-10-08 97 views

回答

4

創建一個protocolDetailViewDelegate?)並在您的DetailViewController中創建一個delegate屬性。當您實例化視圖控制器時,請將委託屬性設置爲self,並使用該屬性將消息發送回您的主視圖控制器。唯一棘手的部分是您需要將委託屬性聲明爲「assign」,以便您不會在詳細視圖和主視圖之間創建保留循環。


DetailViewController.h:

@class DetailViewController; // Forward Declaration. 
@protocol DetailViewDelegate 
- (void)detailViewController:(DetailViewController *)controller didChangeBool:(BOOL)theBool; 
@end 

@interface DetailViewController : UIViewController { 
    id <DetailViewDelegate> delegate; 
} 

@property (assign) id <DetailViewDelegate> delegate; 

@end 

這僅僅是接口,但它應該讓你大部分的方式存在。設置詳細視圖的delegate屬性並在您的主視圖中實現detailViewController:didChangeBool:方法,就是這樣。


爲了回答您的評論的問題:

  1. 是。在推動詳細視圖控制器之前,將它的delegate屬性設置爲self
  2. 您需要聲明您的主視圖控制器實現了DetailViewDelegate協議。通過閱讀Apple's Documentation瞭解如何做到這一點。
  3. 聲明您的主視圖控制器將實現協議後,您需要實際執行它。將一個detailViewController:didChangeBool:方法添加到您的主視圖控制器。
+0

你可以展示一些關於如何做到這一點的代碼? – 2010-10-08 22:42:07

+0

第二行的目的是什麼?它真的有必要嗎?我在「detailViewController」之前收到一個錯誤消息,說「Expected」)' – 2010-10-09 00:15:50

+1

這不是必須的,它是爲你的委託對象聲明一個正式的接口,除非你有充分的理由去除它,但你應該把它作爲一個調試它確保你的委託實現所有你認爲將要實現的方法我編輯了代碼以使警告消失 – kubi 2010-10-09 01:15:24

相關問題