2011-10-05 78 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

相关问题