因此,我一直使用this tutorial在我的iOS应用中实现滑动菜单。但是,当我尝试按下Home Cell按钮时,根据我的理解,Home Controller会刷新,因为它将旧控制器的另一个版本放置在旧控制器的顶部。我正在开发一个游戏,因此您可以了解为什么这种情况不理想-本质上,每次用户使用滑出菜单时,它都会创建一个新游戏。是否有任何方法可以防止这种刷新的发生或其他可能的解决方法?

最佳答案

根据本教程告诉您的内容,将对菜单中的每个单元格项目执行检测。为防止重新加载已经存在的View Controller,您应该做的是在didSelectRowAtIndexPath:中执行segue,但要进行检查以查看当前View Controller是否等于所选的View Controller。您应该使菜单控制器具有所有可能的视图控制器属性,并使菜单控制器成为根控制器。这样,您可以检测到最后一个视图控制器是否为选定的控制器。在管理委托方法didSelectRowAtIndexPath:中的菜单的控制器上,添加以下内容:

在menuController.h中

@property (retain, nonatomic) OneViewController *thatViewController;


在menuController.m的didSelectRowForIndexPath中:

NSArray *segueIdentifiers = @[@"firstSegueID",@"secondSegueID",...];//list of all segues possible in order matching the rows, so row0 would associate to the firstSegueID
if ([segueIdentifiers objectAtIndex:indexPath.row] isEqualToString:@"firstSegueID"])
{
    BOOL isInstantiated;
    isInstantiated = NO;
    if (self.thatViewController == nil) //or some way to check if it was already instantiated like testing a property of the controller
    {
        self.thatViewController = [[OneViewController alloc] init]; //or whatever init class method you like
        [self.thatViewController.property setThemHere];

        isInstantiated = YES;
    }

    [self presentViewController:self.thatViewController animated:YES completion:^{NSLog(@"presented that view controller, was reloaded: %@",isInstantiated);}];
}


EDIT1:因此,基本上,实例化控制器一次:

然后将对象实例化放置在oneViewController.m中的适当位置。例如,您不希望是易失的对象(我假设这是家庭控制器上的所有对象)应在此处分配和初始化。这将需要您将大部分UI机制转移到编程上,而不是从故事板上。我相信当您执行segue时,它将分配并创建一个新的视图控制器,然后运行performSegueWithIdentifier:animated:

EDIT2:我刚刚意识到我输错了我的代码,它们现在应该包含最新的修订版,对于造成的混乱,我深表歉意。

EDIT3:如果您仍然想保留方法的滑动方式,那么我对动画呈现和关闭视图控制器的要求不是特别高。但是,仅通过doing the method from this post严格实例化即可应用相同的逻辑。如果您不想打扰:

if (! self.thatViewController) {
    self.thatViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // set this property in the story board
}


然后,您可以执行segue,而无需分配整个新控制器。

关于ios - 如何在不重新加载主屏幕的情况下创建滑出菜单(如在Facebook应用程序上)? (ios),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23553214/

10-14 21:15
查看更多