推动视图控制器在目标c上获得空白页之后

问题描述 投票:0回答:1

试图从appdelegate推送视图控制器。将其重定向到适当的视图控制器,但缺少ui

code

-(void)checkConditionToMoveToPaynoteDetailPage
{
    if([_topViewController isKindOfClass:[TCSPayNoteHomeViewController class]])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:popCurrentPaynoteDetailPage object:self];
        [self performSelector:@selector(moveToPaynoteDetailPage) withObject:nil afterDelay:2];
    }
    else{
        BOOL ctrlIsPresent = NO;

        for (id ctrlr in  self.navigationCtrlArray )    //required controlled is in betwwen
        {
            if([ctrlr isKindOfClass:[TCSPayNoteHomeViewController class]])
            {
                ctrlIsPresent = YES;
            }

        }


        if(ctrlIsPresent)  //required controlled is in betwwen
        {

            dispatch_async(dispatch_get_main_queue(), ^{
                [self.navController popToViewController:[self.navigationCtrlArray objectAtIndex:0] animated:YES]; // top is required controller
                [self performSelector:@selector(moveToPaynoteDetailPage) withObject:nil afterDelay:2];
            });

        }
        else{
            [self moveToPaynoteDetailPage];
            // rquired controller is not in a stack
        }
    }

}

-(void)moveToPaynoteDetailPage
{
    UIViewController *viewController = [self getTopViewController];

    TCSPayNoteHomeViewController *paynoteDetailCtrl= [[TCSPayNoteHomeViewController alloc] init];

    TCSPayNote *payNoteData = [[TCSPayNote alloc] init];

    payNoteData.payNoteEntryID = [_notifInfo valueForKey:@"id"];

    paynoteDetailCtrl.payNoteData = payNoteData;


    [viewController.navigationController pushViewController:paynoteDetailCtrl animated:NO];

}

**视图控制器**

-(UIViewController*)getTopViewController
{
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    UIViewController *viewController = navController.topViewController;
    return viewController;
}

-(void)getNavigationCtrlArray
{
    self.navController = (UINavigationController *)self.window.rootViewController;
    self.navigationCtrlArray = [self.navController viewControllers];
}

im试图从appdelegate推送视图控制器。将其重定向到正确的页面,但是在按

时未加载ui
objective-c push-notification appdelegate pushviewcontroller
1个回答
0
投票

我在某处做了类似的操作,但对getTopViewController具有不同的功能。这是我的代码。

// Find and return top view controller
+ ( UIViewController * ) topViewController
{
    return [fmUiUtil topViewControllerFrom:UIApplication.sharedApplication.keyWindow.rootViewController];
}

// Given a starting point, find the best top view controller
+ ( UIViewController * ) topViewControllerFrom:( UIViewController * ) vc
{
    if ( vc.presentedViewController )
    {
        return [fmUiUtil topViewControllerFrom:vc.presentedViewController];
    }
    else if ( [vc isKindOfClass:UISplitViewController.class] )
    {
        UISplitViewController * svc = ( UISplitViewController * ) vc;

        if ( svc.viewControllers.count )
        {
            return [fmUiUtil topViewControllerFrom:svc.viewControllers.lastObject];
        }
        else
        {
            return vc;
        }
    }
    else if ( [vc isKindOfClass:UINavigationController.class] )
    {
        UINavigationController * svc = ( UINavigationController * ) vc;

        if ( svc.viewControllers.count )
        {
            return [fmUiUtil topViewControllerFrom:svc.topViewController];
        }
        else
        {
            return vc;
        }
    }
    else if ( [vc isKindOfClass:UITabBarController.class] )
    {
        UITabBarController * svc = ( UITabBarController * ) vc;

        if ( svc.viewControllers.count )
        {
            return [fmUiUtil topViewControllerFrom:svc.selectedViewController];
        }
        else
        {
            return vc;
        }
    }
    else
    {
        return vc;
    }
}

此外,在代表中,我也使用[topVC presentViewController ...而不是[topVC.navigationController pushVC

© www.soinside.com 2019 - 2024. All rights reserved.