【问题标题】:Open specific tab bar when receive push notification收到推送通知时打开特定的标签栏
【发布时间】:2019-01-03 21:58:02
【问题描述】:

收到推送通知时如何打开特定的标签栏?

我已经将[self.tabBarController setSelectedIndex:2];放在 viewDidAppear 上,并且在数据记录中发生了什么,它显示它通过 tabBar 2 viewController 但它没有打开/显示该页面并保留在 firstView 控制器/第一个 tabBar。

然后在我终止应用程序并重新打开后,它会自动/突然打开 tabBar 2 viewController。

谁能提供任何想法或示例代码来解决这个问题?

这是在我的 didReceiveRemoteNotification 中;

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    NSLog(@"Remote notification received");

    if([userInfo valueForKey:@"app"]) {

        NSString *action_app = [userInfo valueForKey:@"app"];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:action_app forKey:@"app"];

        NewVC *sample=[[NewVC alloc]init];
        [sample viewDidLoad];

        //[self.tabBarController setSelectedIndex:2];

        [self clearNotifications];

    }else{

        NSLog(@"---nothing to read---");
    }
}

NewVC 位于标签栏 2。

【问题讨论】:

  • 在 appDelegate 的 didReceiveRemoteNotification 方法上写 setSelectedIndex 代替 viewDidAppear。
  • @Viruss mca..我已经这样做了,但什么也没发生
  • 显示你做了什么?
  • @Viruss mca..我已经在上面提出了问题的代码..

标签: ios objective-c cocoa-touch push-notification tabbar


【解决方案1】:

你必须改变tabbar selectedIndex之类的,

- (void)application:(UIApplication *)application  didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([userInfo valueForKey:@"app"]) {

      NSString *action_app = [userInfo valueForKey:@"app"];
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     [defaults setObject:action_app forKey:@"app"];

   UITabBarController *tabb = (UITabBarController *)self.window.rootViewController;
   tabb.selectedIndex = 2;
 }
}

【讨论】:

  • 还有一个问题,如果应用程序处于活动状态,这将起作用。但是,当应用程序处于非活动状态或终止时,它只会打开主页/选项卡而不打开选项卡 2 ..即使应用程序处于非活动状态或终止,我如何在收到通知时打开选项卡 2?我已经将该代码放入'didFinishLaunchingWithOptions' 但它不起作用。
  • 兄弟,如果当您点击通知中心的通知时应用程序处于非活动状态,它将调用此方法。
  • 是的,我已经将该代码放入此方法中,但仍然无法正常工作
  • 尝试了很长时间才能使其正常工作,但找不到正确的方法。感谢您的帮助。
  • @DilipTiwari:您可以在不同的线程中解释您的问题。
【解决方案2】:

对于斯威夫特

这是推送通知数据:

{

  "aps": {
    "alert" : "Hello Your Order ID 107922341457c134962d002 is Ready. Thank you For choosing us!!",
    "badge" : "1",
    "sound" :"default"
     },

  "order": {
    "item_name" : "Spanish Masala",
    "order_id":"107922341457c134962d002" ,
    "food_id":"15"
    }
}

这是AppDelegate.swift中的代码

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {

    if loginFlag{
    if let temp = userInfo["order"] as? Dictionary<String, AnyObject> {
        sharedObject.orderDetailsFromPushNotification = temp
        if let navController = self.window?.rootViewController as? UINavigationController{
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
            if let myViewController = storyboard.instantiateViewControllerWithIdentifier("tabHome") as? MyTabViewController{

                myViewController.selectedIndex = 1

                navController.pushViewController(myViewController, animated: true)


            }}
        }}
}

【讨论】:

    【解决方案3】:

    我是怎么做的:

            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let tabBarVC = storyboard.instantiateViewController(withIdentifier: StoryboardIDKeys.tabBarViewController.rawValue) as? TabBarViewController //{
            tabBarVC?.selectedIndex = 1
            self.window?.rootViewController = tabBarVC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多