【问题标题】:Persist view controller state in SWRevealViewConttoller in iOS?在 iOS 的 SWRevealViewConttoller 中保持视图控制器状态?
【发布时间】:2016-10-21 14:09:23
【问题描述】:

我在 iOS 中使用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”时它会保留在堆栈中,然后它会从导航堆栈重新启动,而不是再次初始化视图控制器。

【问题讨论】:

  • 为什么您没有使用您建议的解决方案?
  • 我无法理解如何将它与 swrevealviewcontroller 一起使用。
  • 您可以在侧边菜单的 vc 中保留对视图控制器的引用
  • 您能否提供此代码或解释更多..

标签: ios objective-c iphone swrevealviewcontroller


【解决方案1】:

例如,对于 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];
}

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多