MMDrawerController和实例化多个视图控制器

3
这是一个关于MMDrawerController的特定问题,尽管可能与其他iOS抽屉控制器有关。
我已经成功地使用MMDrawerController,并且可以通过在我的抽屉表格视图中选择一行来加载不同的视图控制器到"center"。
然而,我想避免每次在我的抽屉中选择菜单项时实例化我的视图控制器。这似乎是低效的,特别是如果用户在会话期间多次切换屏幕。我猜想更好的方法是将我正在使用的(实例化的)视图控制器存储为变量并重用?我有很多视图控制器可能要加载到中心,每个视图控制器都会在viewDidLoad中做一些'工作'。
这是我如何将新的视图控制器加载到中心(在我的DrawerViewController.didSelectRowAtIndexPath方法中):
MyViewConroller * newCenter = [[MyViewConroller alloc] init];

UINavigationController * nav = [[MMNavigationController alloc] initWithRootViewController:newCenter];

        if(indexPath.row==0){
            [self.mm_drawerController
             setCenterViewController:nav
             withCloseAnimation:YES
             completion:nil];
        }

希望能就最佳的视图控制器加载方法提供意见/评论。

1个回答

5
这种方法对我来说效果很好,每次用户更改视图时都无需实例化新的视图控制器或导航控制器。

声明一个可变数组来保存您的导航控制器:

@property (nonatomic, strong) NSMutableArray *navigationControllerArray;

初始化数组并填充与视图控制器数量相同数量的空字符串:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationControllerArray = [[NSMutableArray alloc] initWithObjects:@"",@"",@"",nil];

}

在您的 UITableViewDelegate 中,检查所选行的对象是否为 UINavigationController。如果不是,则实例化一个新的导航控制器,并将其替换为导航控制器数组中的空字符串。
将此导航控制器设置为中心视图控制器:
#pragma mark - UITableViewDelegate

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSObject *navigationController = [self.viewControllerArray objectAtIndex:indexPath.row];

    if (![navigationController isKindOfClass:[UINavigationController class]]) {

        UIViewController *newViewController;

        switch (indexPath.row) {
            case 0:
                newViewController = (UIViewController *)[[AccountListTableViewController alloc] init];
                break;
            case 1:
                newViewController = (UIViewController *)[[PageDetailViewController alloc] init];
                break;
            case 2:
                newViewController = (UIViewController *)[[LoginViewController alloc] init];
                break;

            default:
                newViewController = (UIViewController *)[[AccountListTableViewController alloc] init];
                break;
        }

        navigationController = (UINavigationController *)[[UINavigationController alloc] initWithRootViewController:(UIViewController *)newViewController];

        [self.viewControllerArray replaceObjectAtIndex:indexPath.row withObject:navigationController];

    }

    [self.mm_drawerController setCenterViewController:(UINavigationController *)navigationController withCloseAnimation:YES completion:nil];

    return indexPath;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接