2010-04-22 1 views
0

У меня есть мой «трястий», работающий отлично (с использованием motionEnded), основанный на коде Apple GLPaint. Когда пользователь встряхивает устройство (работает 3,0 и выше), я хочу открыть контроллер вида с помощью currentModalViewController.Встряхнуть, чтобы открыть просмотр modally

В моей AppDelegate у меня есть уведомление (в соответствии с примером кода GLPaint):

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

В моей shakeToOpenHiddenScreen я просто хочу, чтобы открыть вид «х» модально, но я не думаю, что мой 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-контроллер не является более полезным для этой цели, чем любой другой контроллер представления, и в идеале должен быть контроллер вида, вызываемый из делегата приложения в любом приложении. –

+0

thx за советами – Cesar

Смежные вопросы