簡體   English   中英

在iOS的SWRevealViewConttoller中保持視圖控制器狀態嗎?

[英]Persist view controller state in SWRevealViewConttoller in iOS?

我在SWRevealViewController的導航抽屜中使用SWRevealViewController 。我有一個主屏幕,默認情況下會在應用啟動時顯示。我還有其他屏幕,例如SWRevealViewController設置'',` SWRevealViewController幫助'',``關於''。 因此,當用戶在屏幕之間切換時,第一視圖控制器的狀態將重置。

我正在使用下面的代碼在屏幕之間切換。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
    if(indexPath.row==0)
    {
        [self performSegueWithIdentifier:@"home" sender:cell];
        [cell setSelected:YES];
    }

    else if(indexPath.row==1)
    {
        [self performSegueWithIdentifier:@"settings" sender:cell];
    }

    else if(indexPath.row==2)
    {
        [self performSegueWithIdentifier:@"help" sender:cell];
    }
    else if(indexPath.row==3)
    {
        [self performSegueWithIdentifier:@“about” sender:cell];
    }

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Segue");
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    UINavigationController *destViewController = (UINavigationController*)segue.destinationViewController;
    destViewController.title = [[titles objectAtIndex:indexPath.row] capitalizedString];
   if([segue.identifier isEqualToString:@"settings"])
    {
        self.revealViewController.navigationItem.title = @"Settings";

    }
    else  if([segue.identifier isEqualToString:@"help"])
    {
        self.revealViewController.navigationItem.title = @"help";
    }
    else  if([segue.identifier isEqualToString:@"about"])
    {
        self.revealViewController.navigationItem.title = @"about";
    }

    if([segue isKindOfClass:[SWRevealViewControllerSegue class]])
    {
        SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;

        swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
            UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
            [navController setViewControllers: @[dvc] animated: NO ];
            [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];



        };

    }

  }

我看到的一種解決方案是,將viewController保留在導航堆棧中,以使viewController不會被破壞,當用戶轉到“ home”時,它仍保留在堆棧中,然后從導航堆棧重新啟動,而不是再次初始化視圖控制器。

例如對於HelpVC,您將其屬性存儲在側面菜單控制器中:

@property (nonatomic, strong) HelpViewContoller* helpVC;

比行選擇而不是調用segue更為方便,您實例化了視圖控制器,但是在此之前,您檢查它是否已被實例化,您已經在使用它:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
if(indexPath.row==0) {
    if (helpVC == nil) {
        helpVC =  [self.storyboard instantiateViewControllerWithIdentifier:@"helpVCidentifier"];
        [self changeFrontVCto:helpVC];
    }
}   
 }


-(void) changeFrontVCto:(UIViewController*)vc {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[vc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM