将RootviewController中的函数调用到AppDelegate

时间:2011-10-05 09:53:20

标签: ios

我有一些RootviewControllers,当然还有一个App Delegate。在我的App Delegate上,我切换到我想要的所有控制器。

现在,如果用户按下App Delegate上的完成按钮(-IBAction Deklaration),我想禁用GPS。如何从RVC中调用该功能。

我见过那个样本

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

但我真的不明白它的作用。

在我的RootViewController上,我想要这个

[self.mapView setShowsUserLocation:NO];

将在此功能

中的App Delegate中执行
-(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]; 

}

请帮忙。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您在问什么,问题的本质意味着您需要更好地了解iOS应用程序架构。 UI交互只应在UIViewController子类中完成,而不应在UIApplication委托中完成,UIApplication委托应仅负责btnLocationDone的委托函数(如名称所示),包括启动和关闭处理。

方法UIViewController没有理由在你的app委托中;例如,它可以更好地放置在btnLocationDone的共享超类中,或者放在协调对象中,具体取决于您对架构的选择。

强烈建议只有类名以大写字母开头。

如果您想在视图控制器中调用IBAction时在您的应用委托中执行- (IBAction)done { [self.mapView setShowsUserLocation:NO]; MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; [delegate btnLocationDone]; } ,您可以这样做:

{{1}}