Встряхнуть, чтобы открыть вид модально - PullRequest
0 голосов
/ 23 апреля 2010

У меня нормально работает "встряска" (с использованием motionEnded), основанная на коде Apple GLPaint. Когда пользователь встряхивает устройство (работает 3.0 и выше), я хочу открыть контроллер представления модально, используя presentModalViewController.

У меня в приложении есть уведомление (согласно примеру кода GLPaint):

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

В моем shakeToOpenHiddenScreen я просто хочу открыть представление 'x' модально, но не думаю, что мой appdelegate будет отвечать на presentModalViewController.

Есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

Для использования 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
}

Это должно работать, дайте мне знать:)

0 голосов
/ 23 апреля 2010

Это метод в UIViewController, поэтому вы должны либо иметь доступ к сохраненному контроллеру представления из вашего appDelegate, либо настроить уведомление для вызова одного (addObserver: someVC).

"встряхнуть" не является стандартным именем уведомления, поэтому в вашем приложении должен быть какой-то код, который публикует это уведомление, предположительно также скопированный из образца GLPaint.

...