2011-10-05 53 views
0

我有一些RootviewControllers,當然還有一個App Delegate。在我的應用程序委託我切換到我想要的所有控制器。將RootviewController中的函數調用到AppDelegate

現在,我想禁用GPS,如果用戶按下應用程序委託(-IBAction Deklaration)上的完成按鈕。我如何從我的RVC調用該功能。

我已經看到,樣品

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

,但我並不真正瞭解它做什麼。

在我的RootViewController的我想這

[self.mapView setShowsUserLocation:NO]; 

可在App代表在這個函數

-(IBAction) btnLocationDone { 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.7]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
          forView:MainView cache:YES]; 

    [UIView commitAnimations]; 

    [MainWindow addSubview:MainView]; 
    [LocationWindow setHidden:YES]; 
    [MainWindow setHidden:NO]; 
    [LocationWindow removeFromSuperview]; 

} 

請幫忙執行。

回答

0

不清楚你在問什麼,問題的本質意味着你需要更好地理解iOS應用程序體系結構。 UI交互應該僅在UIViewController子類中完成,而不是在UIApplication委託中完成,委託僅應負責UIApplication(包括啓動和關閉處理)中的代理功能(如名稱所示)。

沒有理由btnLocationDone應該在您的應用程序委託中;例如,根據您選擇的架構,最好放置在您的UIViewController的共享超類中,或置於協調對象中。

強烈建議只有班級名稱以大寫字母開頭。

如果你想在你的應用程序代理執行btnLocationDoneIBAction被稱爲視圖控制器,你可以只是做:

- (IBAction)done { 
    [self.mapView setShowsUserLocation:NO]; 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate btnLocationDone]; 
} 
+0

謝謝你幫了我很多(我完全是新的iPhone發展)。如果我寫下一個應用程序,我會遵循你的忠告。但目前,如果我從AppDelegate執行IBActions,蘋果拒絕我的應用程序? – CaspervanDoorn

+0

蘋果不會拒絕應用程序,因爲它的結構很差;然而,一個結構不好的應用程序可能會有其他問題,可能會導致它被拒絕。對於你來說,閱讀MVC(正確的,Smalltalk/Objective-C風格的MVC)是一個不錯的主意,並且可以回顧一些通常很好形成的Apple例子。 –

+0

謝謝,我會這麼做;) – CaspervanDoorn

相關問題