2014-02-27 50 views
3

这是一个特定的MMDrawerController问题,虽然可能与其他iOS抽屉控制器有关。MMDrawerController和实例化许多视图控制器

我有我的MMDrawerController很好地工作,并可以通过选择我的抽屉tableview中的行加载到'中心'不同的视图控制器。

但是,我想避免每次在我的抽屉中选择一个菜单项时实例化我的视图控制器。这似乎效率低下,特别是如果用户在会话期间多次在屏幕之间切换。我猜想一个更好的方法是将我正在使用的(实例化)视图控制器存储为变量并重用?我有很多视图控制器可能会加载到中心,每个视图控制器最初都会在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]; 
     } 

思考/关于装入这些视图控制器的最佳办法的意见,将不胜感激。

回答

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; 
} 
+0

这是金色!!!!希望我能多劳多得。 – stellarowl12

相关问题