收到UINotification后打开特定视图

时间:2012-08-16 12:37:03

标签: iphone ios uiviewcontroller uilocalnotification

当我的应用收到通知时,它会像打开特定视图一样处理它:

    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotif) {
        NSLog(@"Recieved Notification  didFinishLaunchingWithOptions %@",localNotif);
        [theLastPresentedViewController presentViewController:myVC animated:YES completion:nil];
    }

基本上我的问题是如何访问最后提供的ViewController theLastPresentedViewController ,以便我可以在其上面显示myView

虽然应用程序使用tabBarViewController作为基础,但我在其他视图之上呈现其他viewControllers,因此无法知道哪个ViewController已被显示为最后一个。

我是否必须手动记住我提供的每个ViewController,所以当应用程序启动时我可以访问最后一个或者有没有办法直接访问应用程序的最后一个可见viewController?

由于用户只需按下HOME按钮并退出应用程序,因此无法知道此时显示的是哪个视图。在到达tabBarViewController之前,从堆栈中解除所有这些视图也是可以的。

非常感谢!

3 个答案:

答案 0 :(得分:2)

执行“随机”推送到导航堆栈基本上是一个坏主意。您可以将半模态或模态控制器作为对通知的反应,并且通常不需要指向“顶部可见”视图控制器的指针。

或者,您可以允许视图控制器/视图接受第一响应者,例如:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

现在,您可以发送一个事件:

[[UIApplication sharedApplication] sendAction:@selector(popNotification) to:nil from:notificationObj forEvent:nil];

它将被分派给第一响应者(即任何焦点视图,然后向下查看控制器,因为视图无法处理自定义事件)。从这一点开始,您处于顶部可见视图控制器的上下文中,可以继续执行原始任务。

答案 1 :(得分:1)

我发现这可以访问最顶层的窗口/视图:

[[[UIApplication sharedApplication] keyWindow] addSubview:someView]

答案 2 :(得分:0)

    - (void)applicationDidEnterBackground:(UIApplication *)application{
saveIndex = self.tabBarController.selectedIndex //shows the current index of the viewController of the Array of the tabBarController
    //add some stuff to save the integer}

您可以在用户退出应用程序时保存此整数,并在应用程序变为活动状态后加载带有此数组元素的tabBarController

要打开已保存的视图,请在AppDelegate中写下:

  - (void)applicationDidBecomeActive:(UIApplication *)application{
[self.tabBarController setSelectedIndex:savedIndex];}

这应该这样做