2013-04-18 4 views
0

Хорошо, поэтому я искал ответ на следующий вопрос: как нажимать определенный контроллер просмотра в поле зрения, когда push-уведомление поступает из AppDelegate?Нажатие вида, когда rootViewController не является UINavigationController

И большинство ответов заключается в том, что если rootViewController является UINavigationController, я должен создать представление через мой StoryBoard и нажать его с помощью этого корневого навигационного контроллера.

Вот моя ситуация. Вот как устроена моя раскадровки:

enter image description here

Итак, как вы видите мой RootViewController не UINavigationController. Итак, как мне заставить выдвинуть определенный взгляд из моей раскадровки?

ПРИМЕЧАНИЕ. Представление некоторых отдельных модальных представлений для push-уведомлений на самом деле не является отличной идеей. Это мое последнее средство.

Я бы хотел найти решение, как в приложениях Apple Mail and Message.

+0

Вы можете добавить встроенный rootViewController в navigationController и сохранить скрытую навигацию? – Anupdas

+0

Это начало, но как я могу нажать еще один вид из StoryBoard? Или можно только создавать и показывать новые? –

+0

С какого контроллера вы хотите показать (нажмите) этот новый контроллер представления (хотите ли вы его вытащить из любого контроллера, который находится на экране, когда приходит уведомление)? В чем цель этого нового контроллера? В зависимости от того, для чего это, модальная презентация может быть более уместной. – rdelmar

ответ

0

Хорошо, я думаю, я не отказываюсь от этого легко :) Вот решение, которое я нашел для своей проблемы. Поскольку я представляю свои основные приложения в режиме просмотра модального вида, вот что я сделал:

Так как у iOS 5 каждый контроллер вида имеет свойство presentedViewController. Как только вы это знаете, это довольно легко. Вот некоторый конкретный код внутри AppDelegate.m

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    if ([[userInfo objectForKey:@"notificationType"] isEqualToString: @"messageType"]) { 

    UITabBarController * tabBarController = (UITabBarController *)[self.window.rootViewController presentedViewController]; 
[tabBarController setSelectedIndex:kChatViewIndex]; 
// My view controller that I presented modally is a tabBar, your case can be different. 

// ... so from here I can reach any navigation controller or any other view from inside my app 

} 

Теперь, так как вы получили ваш контроллер представления, вы можете использовать setSelectedIndex: если это tabBarController, или нажать на определенный контроллер представления, если это блок навигации.

Надеюсь, это поможет любому, у кого есть аналогичная проблема. Приветствия!