【问题标题】:uinavigation controller delegate not work with MFSideMenuuinavigationcontrollerdelegate 不适用于 MFSideMenu
【发布时间】:2024-01-14 05:53:02
【问题描述】:

我有一个带有“旧”Tabbarcontroller 和 MainWindow.xib 的应用程序。我必须删除 tabbarcontroller 逻辑来转换应用程序并制作“左侧菜单”类型,如 facebook。我有一个问题,我已经用 tableviewcontroller 创建了左侧菜单,我可以打开、关闭和正确推送我的控制器......现在我想为每个导航控制器插入一个不同的自定义导航栏类​​(在旧版本的app 每个导航控制器都有他的自定义导航类来更改与活动视图控制器相关的 che 图像)。这是我在左侧菜单中一行的 tableview didselect 方法中使用的代码:

 if (indexPath.row==1) {

    DemoViewController *demoController = [[DemoViewController alloc] init];
    UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
    [navigationController setValue:[[CustomNavigationBar alloc]init] forKeyPath:@"navigationBar"];
    NSArray *controllers = [NSArray arrayWithObject:demoController];
    navigationController.viewControllers = controllers;
    [self.menuContainerViewController setMenuState:MFSideMenuStateClosed];
} 

此代码正确管理幻灯片并正确加载 MFSideMenu 中的视图控制器。自定义导航栏类​​已分配但无法正常工作:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

这个方法永远不会被调用,也许 MFSideMenu 覆盖了 uinavigationcontroller 委托?我怎样才能使这个导航控制器委托方法再次“活跃”?

【问题讨论】:

    标签: ios objective-c delegates uinavigationcontroller


    【解决方案1】:

    找到了解决办法,这段代码:

          DemoViewController *demoController = [[DemoViewController alloc] init];
        UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
    
        CustomNavigationBar *navClass=[[CustomNavigationBar alloc]init];
        [navigationController setValue:navClass forKeyPath:@"navigationBar"];
        [navigationController setDelegate:navClass];
    
        NSArray *controllers = [NSArray arrayWithObject:demoController];
        navigationController.viewControllers = controllers;
        [self.menuContainerViewController setMenuState:MFSideMenuStateClosed];
    

    代替:

    DemoViewController *demoController = [[DemoViewController alloc] init];
    UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
    [navigationController setValue:[[CustomNavigationBar alloc]init] forKeyPath:@"navigationBar"];
    NSArray *controllers = [NSArray arrayWithObject:demoController];
    navigationController.viewControllers = controllers;
    [self.menuContainerViewController setMenuState:MFSideMenuStateClosed];
    

    这样代理就被正确分配了……

    【讨论】: