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 animation: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 に答える