2012-03-08 64 views
0

我在調用不同視圖控制器中的方法時遇到了一些麻煩。父視圖控制器中的調用方法

這裏是我的設置: ViewController1 - > ViewController2 - > ViewController3

使用ViewController2一個WEPopoverController調用ViewController1電話:

UIViewController2 *viewCon2 = [[UIViewController2 alloc] init]; 

navPopover = [[WEPopoverController alloc] initWithContentViewController:viewCon2]; 
[navPopover presentPopoverFromRect:CGRectMake(0, 0, 50, 57) 
           inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown 
          animated:YES]; 

我想ViewController3能夠調用內ViewController1存在的方法。由於ViewController3不是直接從ViewController1初始化的,我無法弄清楚如何使用委託方法來調用ViewController1的方法。

任何想法?

回答

1

在ViewController1 vieDidLoad添加行..

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

(做刪除的dealloc觀察者)當您想從viewcontroler 3調用視圖的方法

的話.. 郵政通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"Message" object:nil userInfo:nil]; 

當你p ost通知methodFromViewController3方法在第一個視圖中調用(您必須在視圖控制器中添加該方法)...在您的情況下..您可以將其更改爲您想要調用的現有方法的名稱。 。

+0

請注意,通知不應該用於調用方法,這是我認爲原來的海報問。通知是針對特殊情況的。查看下面的@Alexander發佈的鏈接,瞭解更多關於這個 – 2012-03-08 14:36:21

+0

的更多信息我知道他的回答更好..但是爲什麼要投我一票?......一切都以它自己的速度進行...... @ sw333t不知道通知本身......你希望他採取完整的文檔解釋通信對象......它會混淆他更多.. – Shubhank 2012-03-08 14:43:40

+0

如果他不知道通知,那麼這不是開始的地方。通過適當的對象設計來啓動它,並建立基礎知識並進行更高級的主題(如通知)。否則,你的答案意味着通知是在其他類中調用方法的默認方式,這是不好的做法。 – 2012-03-08 15:02:46

3

有幾種方法可以在類之間進行通信,你可以閱讀更多here

+0

+1爲了提供,將教問題提問者很多東西信息將對他們有益。 – 2012-03-08 14:13:26

+0

加1爲起牀投票回答與鏈接的問題... – 2015-11-16 18:31:52

0

如果VC3有VC2參考,並VC2有VC1一個參考,你可以做這樣的VC3:

ClassOfViewController2* vc2 = [self viewController2]; 
ClassOfViewController1* vc1 = [vc2 viewController1]; 
[vc1 myAwesomeMethod]; 
+0

在這樣做的過程中,你所有的課程都必須知道鏈中的所有其他課程。這不是很好。 – 2012-03-08 14:31:50

相關問題