0

基于 Apple 的 GLPaint 代码,我的“摇动”工作正常(使用 motionEnded)。当用户摇动设备(运行 3.0 及更高版本)时,我想使用 presentModalViewController 模态打开一个视图控制器。

在我的 appdelegate 中,我收到了通知(根据 GLPaint 示例代码):

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

在我的shakeToOpenHiddenScreen 中,我只想以模态方式打开视图'x',但我认为我的appdelegate 不会响应presentModalViewController。

有没有解决的办法?

4

2 回答 2

1

要使用 presentModalViewController,您必须从 UIViewController 类或子类中使用它:

例如: //RootViewController.m [self.navigationController presentModalViewController:loginRegView animated:YES];

您可以通过在应用程序委托中定义导航控制器来解决此问题:

//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;

并合成它

@syntetize nav;    

要使用 presentModalViewController,您必须从 UIViewController 类或子类中使用它:

例如:

//RootViewController.m
[self.navigationController presentModalViewController:loginRegView animated:YES];

您可以通过在应用程序委托中定义导航控制器来解决此问题:

//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;

合成它

//yourApp_comAppDelegate.m
@synthesize nav;

现在您可以使用以下方法:

//yourApp_comAppDelegate.m
[nav presentModalViewController:yourView animated:YES];

但是,首先你必须将它分配到某个地方,我将在 RootViewController 中进行

//RootViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
app = (yourApp_comAppDelegate *) [[UIApplication sharedApplication] delegate];
    app.nav = self.navigationController
}

它应该工作,让我知道:)

于 2010-04-23T02:01:38.293 回答
0

它是 UIViewController 上的一种方法,因此您应该可以从 appDelegate 访问已保存的视图控制器,或者设置通知以调用一个 (addObserver:someVC)。

“shake”不是标准的通知名称,因此您的应用程序中的其他地方应该有一些代码发布此通知,大概也是从 GLPaint 示例中复制的。

于 2010-04-23T01:55:53.983 回答