1

我有以下使用情况。 我使用KYDrawerController库。我制作了一个抽屉菜单,它的工作很好。我的MainViewController是一个UINavigationController。在工具栏/导航栏上,我有一个汉堡包图标来打开抽屉菜单。 抽屉菜单有项目,当用户点击它时,它应该打开一个屏幕。导航便捷与抽屉内控制器

在Android中一个将使用的片段时,选择了一个项目,以取代内容,在工具条保持汉堡包图标和抽屉控制器仍然可以容易地打开该情况。

我怎么能实现这个雨燕上,它是一个好主意,用一个UINavigationController,或是否有更好的选择。要求如下。

  • 当一个项目被选中时,工具栏标题必须改变,抽屉菜单仍然可以访问。
  • 当选择一个项目时,内容必须被替换(使用ViewController)
  • 每个'内容'视图控制器都会导致子视图(细节/文章视图),在这种情况下,汉堡包图标应该被替换为后退按钮
  • 应该没有内存泄漏

什么是我们的最佳解决方案?有人有这样的代码示例。

+0

为什么你正在使用KYDrawerController? –

+0

试试这个例子https://www.appcoda.com/ios-programming-sidebar-navigation-menu/ –

回答

1

作为每那里代码,它们正在使用的UINavigationController加载选择的菜单选项。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath{ 
    [tableView deselectRowAtIndexPath:newIndexPath animated:YES]; 

    KYDrawerController *elDrawer = (KYDrawerController*)self.navigationController.parentViewController; 
    UIViewController *viewController; 
    switch ([newIndexPath row]) { 
     case 0:{ 

      viewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"VC1"];     

      break; 
     } 

     case 1:{ 
viewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"VC2"];    break; 
     } 

     default:{ 
      viewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"VC3"];     
      break; 
     } 




    } 

    UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:viewController]; 

    elDrawer.mainViewController=navController; 
    [elDrawer setDrawerState:DrawerStateClosed animated:YES]; 
} 

要从侧面菜单加载的控制器,您需要添加左侧栏按钮项作为“抽屉”按钮。在该按钮的选择器中,您需要添加以下代码行。

- (IBAction)clickedOpen:(id)sender { 

    KYDrawerController *elDrawer = (KYDrawerController*)self.navigationController.parentViewController; 
    [elDrawer setDrawerState:DrawerStateOpened animated:YES]; 
} 
+0

这难道不是创建一个新的NavigationController每次,我需要以编程方式添加汉堡包图标或我可以使用现有的uinavigationview控制器与正确的颜色和图标等? – Brianvdb

+0

是的,每次都会创建新的导航控制器,但是您可以通过重新使用它来避免这种情况。对于该图标,您正在使用的第三方,根据您需要手动添加该按钮的示例。 – KavyaKavita

0

首先,你应该设置的KYDrawerController让它成为你的应用程序的根视图控制器,我会建议申报drawerController作为一个实例变量在AppDelegate.swift

var drawerController:KYDrawerController? 

因此,在didFinishLaunchingWithOptions方法,你可以实现:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

// let's say that you got your first view controller from the "Main" storyboard: 
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 

// asssume that controller would be "HomeViewController" 
let homeVC = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController 

let navigation:UINavigationController = UINavigationController(rootViewController: homeVC) 

appDelegate.drawerController = KYDrawerController(drawerDirection: .left , drawerWidth: 280) 
appDelegate.drawerController.mainViewController = navigation 

appDelegate.window?.rootViewController = appDelegate.drawerController 

通过执行上面的代码,你应该能够变化t他抽屉的状态下从应用anywhere打开,如下:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
appDelegate.drawerController!.setDrawerState(.opened, animated: true)