24

以下の画像のような絵コンテの流れのアプリを作成しています。

絵コンテ

ユーザーが「Sysalert View Controller」からログインすると、「Message List View Controller」に移動し、NSURLConnection を実行して JSON をテーブルにロードします。ユーザーが表の行をタップすると、そのメッセージの詳細情報を表示する「メッセージの詳細」に移動します。

ユーザーがプッシュ通知からアプリを起動すると、起動前のアプリの状態に関係なく、アプリがサーバーから「メッセージリスト」データをロードし、デバイスにプッシュされたばかりのメッセージを表示する必要があります.

アプリにプッシュ通知に反応するように指示するために使用する必要があることはわかってdidFinishLaunchingWithOptionsいますが、「メッセージ リスト」ビュー コントローラーがデータをロードし、「メッセージの詳細」ビュー コントローラーをスタックにプッシュするようにビュー階層を設定するにはどうすればよいですか?適切なメッセージ?

基本的に、この種の動作はメッセージまたはメール アプリの動作を模倣しています。通知で開くと、そのメッセージのView Controllerに移動しますが、最初のviewControllerからアプリを起動し、viewControllerを順番にトラバースしたかのように、階層に戻ることができます。

4

2 に答える 2

8

あなたが説明したことを行うことは可能ですが、お勧めしません。

まず、ストーリーボードに必要なビューを含む切断されたビュー コントローラーを配置し、ビュー コントローラーに "My Push Notification View" のような識別子を付けます。

ではdidFinishLaunchingWithOptions:、アプリ デリゲートから rootViewController にアクセスできます。このコントローラーがナビゲーション コントローラーになります。Navigation Controller を使用すると、新しい View Controller をスタックの一番上にプッシュできます。新しいView Controllerを作成するには、識別子「My Push Notification View」を使用してView Controllerをインスタンス化します。

UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
UIViewController *notificationController = [navController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"];

[navController pushViewController:notificationController animated:YES];

-presentViewController:animated:completion:ナビゲーションスタックを中断するのではなく、モーダルビューを表示するようなものを使用したいと思うでしょう.

UIViewController *rootController = (UIViewController *)self.window.rootViewController;
UIViewController *notificationController = [rootController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"];

[rootController presentViewController:notificationController animated:YES completion:NULL];
于 2013-02-13T21:25:35.940 に答える
4

アプリケーションの 1 つで使用したこれを試してください。アプリケーション デリゲートの変数をグローバルとして使用します。

 ex: BOOL gotNotifcation;

-(void)application:(UIApplication*)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NotificationsViewController *notificationobject = [[NotificationsViewController alloc]init];
    [self.navigationController pushViewController:notificationobject animated:YES];
    gotNotifcation = YES;   
}

カスタマイズされたボタンの場合の戻るボタン アクションの NotificationsViewController 内

-(void)gotoback
{
    AppDelegate *delegate =(AppDelegate *)[UIApplication sharedApplication].delegate;

    if(delegate.gotNotifcation)
    {
        delegate.gotNotifcation = NO;
        MessageListController *feed = [[MessageListController alloc] init];
        [self.navigationController pushViewController:feed animated:NO];
    }
    else
    {
        [self.navigationController popViewControllerAnimated:NO];
    }
}
于 2013-12-23T12:00:22.260 に答える