2010-04-22 63 views
0

我有我的'搖'工作正常(使用motionEnded),基於蘋果的GLPaint代碼。當用戶搖動設備(運行3.0或更高版本)時,我想使用presentModalViewController以模態方式打開視圖控制器。搖動模式地打開視圖

在我的appdelegate我有通知(根據GLPaint示例代碼):

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

在我shakeToOpenHiddenScreen我只是想打開視圖「X」模態,但我不認爲我的appdelegate會響應presentModalViewController。

有沒有辦法解決這個問題?

回答

0

它是UIViewController上的一個方法,因此您應該可以從appDelegate訪問保存的視圖控制器,或者設置通知來調用一個(addObserver:someVC)。

「shake」不是一個標準的通知名稱,所以應用程序中的其他地方應該發佈此通知,大概也是從GLPaint示例中複製的。

1

要使用presentModalViewController你必須從一個UIViewController類,或亞類的使用方式:

例如: //RootViewController.m [self.navigationController presentModalViewController:loginRegView動畫: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 
} 

它應該工作,讓我知道:)

+0

您應該修改刪除重複的文本。此外,nave控制器對於此目的沒有任何其他視圖控制器更有用,理想情況下應該是應用程序代理在任何應用程序中調用的視圖控制器。 – 2010-04-23 02:08:09

+0

thx的建議 – Cesar 2010-04-23 12:38:27