تغيير علامة التبويب المحددة بعد تلقي إعلام الدفع

أرغب في تغيير علامة التبويب المفتوحة عند فتح التطبيق من إشعار الدفع.

في الوقت الحالي ، لدي التطبيق تسجيل الإشعار في تفويض التطبيق وتشغيل طريقة في وحدة تحكم العرض الأول:

على AppDelegate.m </قوي>

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

NSLog(@"didReceiveRemoteNotification");self.apstype = [[NSMutableString alloc] init];self.apstype = [NSMutableString stringWithFormat:@"%@", [[userInfo objectForKey:@"aps"] objectForKey:@"apstype"]];

   //Add the tab bar controller's current view as a subview of the window
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

    HomeTab_Main *controller = [HomeTab_Main alloc];
    [controller receivedNotification];

    if (application.applicationState == UIApplicationStateActive){
        NSLog(@"UIApplicationStateActive");
    } else if (application.applicationState == UIApplicationStateBackground){
        NSLog(@"UIApplicationStateBackground");
    } else if (application.applicationState == UIApplicationStateInactive){
        NSLog(@"UIApplicationStateInactive");
    } else {
        NSLog(@"else");
    }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UINavigationBar *navigationBarProxy = [UINavigationBar appearance];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIImage *backgroundImage = [UIImage imageNamed:@"ge_navigationBar.png"];
        [navigationBarProxy setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

    } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        UIImage *backgroundImage = [UIImage imageNamed:@"ge_navigationBar~ipad.png"];
        [navigationBarProxy setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
    }

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    UIColor *tintColour = [UIColor colorWithRed:0.000 green:0.600 blue:0.765 alpha:1];
    [[UIBarButtonItem appearance] setTintColor:tintColour];

    [[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
      UITextAttributeTextColor, [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset, [UIFont fontWithName:@"Arial-Bold" size:0.0], UITextAttributeFont, nil]];

    return YES;
}

على HomeTab_Main.m </قوي>

- (void)receivedNotification
{
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    NSLog(@"%@", appDelegate.apstype);
    if([appDelegate.apstype isEqualToString:@"inbox"]){
        NSLog(@"goToTab");
        [self performSelector:@selector(goToTab) withObject:nil afterDelay:0.1];
    }
}

- (void)goToTab
{    
    NSLog(@"Go to tab");
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"1 new message" message:@"click to read" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil];
    [alert show];

    self.tabBarController.selectedIndex = 2;
}

المشكلة الرئيسية التي أواجهها هي أنه يتم عرض طريقة عرض التنبيه ، ولكن علامة التبويب لا تتغير. عند الوصول إلى التطبيق من الإشعار ، أريد التبديل تلقائيًا إلى علامة التبويب المقابلة. هل يعرف أحد كيف هذا ممكن مع أي أمثلة؟

تمت إضافة فعل FinishLaunchingWithOptions

0
كلا. OmarAbdelhafith
وأضاف المؤلف dvdfrddsgn, مصدر
كلا ، كان لديه تأخير يصل إلى 10 ثوان ... هو غريب @ عمر عبد الحافظ
وأضاف المؤلف dvdfrddsgn, مصدر
إذا قمت بإزالة التنبيه ، فهل يغير علامة التبويب؟
وأضاف المؤلف Omar Abdelhafith, مصدر
هممم ، إذا قمت بزيادة التأخير هنا بعد ديلا: 0.1 قل إلى 2 ثانية ، هل يعمل؟
وأضاف المؤلف Omar Abdelhafith, مصدر

2 إجابة

هل يمكننا أيضًا الحصول على الرمز من الطريقة للتطبيق: didFinishLaunchingWithOptions: ؟ أود أن أرى كيف تقوم بإنشاء tabBarController.

حاول أيضًا استدعاء self.tabBarController.selectedIndex = 2؛ في الطريقة application: didFinishLaunchingWithOptions: وتحقق من أن وحدة تحكم العرض الصحيحة تصبح نشطة.

0
وأضاف
مضيفا self.tabBarController.selectedIndex = 2 أخطاء ، قائلا 'الخاصية' tabBarController 'غير موجودة في نوع الكائن AppDelegate *'lucwollants
وأضاف المؤلف dvdfrddsgn, مصدر
لا Xcode في متناول اليد لاختباره ، ولكن يجب أن يكون شيء من هذا القبيل self.rootviewcontroller ذلك الحين. AppDelegate لا يوجد لديه tabcontroller ، ولكن يجب أن يكون RootViewController واحد. تأكد أيضًا من عدم وجود شيء (لا يصل الإرسال إلى الصفر في Objective-C)
وأضاف المؤلف Luc Wollants, مصدر

لوك على حق ، على الرغم من أنه self.view.window.rootViewController بدلاً من self.rootviewcontroller . ومع ذلك ، لا أعتقد أنه الحل الأمثل لأن TabBarController لا يجب دائمًا أن يكون rootViewController ...

هل لديك TabBarController في تفويض التطبيق/mainwindow أو في عرض آخر Controller؟

حاول تعيين selectedIndex داخل تفويض التطبيق أو viewController الذي يحتوي على TabBarController.

حصلت على هذا للعمل في أحد تطبيقاتي باستخدام هذا:

على AppDelegate.m </قوي>

-(void)showReportTab{
    [self.tabBarController setSelectedIndex:1];
}

AppDelegate.h

@property (nonatomic, strong) IBOutlet UITabBarController *tabBarController;
0
وأضاف
آسف ديف! من الواضح أنني جديد ، سأبقي على تسليط الضوء على رمز في المرة القادمة ؛)
وأضاف المؤلف LNS, مصدر