从Splitview中的一个Detail View控制器导航到另一个Detail VC

时间:2014-03-21 10:01:57

标签: ios objective-c uinavigationcontroller uisplitviewcontroller

我的Split View有多个DetialViewController。我有一个场景,我需要从一个DetailViewController导航到另一个{{1}}。两者都在iPad的Splitview中。当我尝试推送或模态目标视图时,整个视图显示但不是左侧菜单或主视图控制器的拆分视图。

2 个答案:

答案 0 :(得分:0)

你需要的只是看看Apple自己的THIS EXAMPLE,其中有多个DetailViewContrllers处理得很漂亮

在这里你会发现DetailView管理器管理哪个细节视图控制器应该根据用户输入显示。我想这就是你想要的。

希望它有所帮助。

答案 1 :(得分:0)

管理应显示哪个 detailViewController 。我会发布一个示例代码并解释这个想法,所以希望你能找到你的解决方案,反对这个想法。假设我有一个 splitView ,它添加到 mainView 的右侧:当用户点击显示在 splitView - >中的项目时行动是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MenuItem *item = [menuItems objectAtIndex:indexPath.row];
    if(item && [item controller]) {
        UINavigationController *currentNav= [splitView.viewControllers lastObject];
        UIViewController *currentVC = currentNav.viewControllers[0];
        if(currentVC != [item controller]) {
            UINavigationController *newNavigation = [[UINavigationController alloc] initWithRootViewController:[item controller]];
            NSArray *newVCs = [NSArray arrayWithObjects:self.navigationController,newNavigation,nil];
            splitView.viewControllers = newVCs;
            splitView.delegate = [item controller];
        }
    }
}

班级 MenuItem 管理已添加到 splitView 的项目。 menuItems 是一个数组,其中包含 splitView 中的项目。然后当用户点击某个项目时,我将使用当前语句检查新控制器:if(currentVC != [item controller])。进入 MenuItem 将有一个变量 UIViewController * controller ,只需做一个方法:

 - (MenuItem*)initWithTitle:(NSString *)_title controller:(UIViewController *)_controller imageName:(NSString *)_imageName {
    self.title = _title;
    self.controller = _controller;
    self.imageName = _imageName;
    return self;
}

当您需要将控制器添加为贝尔方法时,此方法将调用:

    - (void) initMenuItems
{
    menuItems = [[NSMutableArray alloc] init];
    Item1 *itm1 =[[Item1 alloc] initWithNibName:@"item1" bundle:nil];   
    Item2 *itm2 = [[Item2 alloc] initWithNibName:@"item2" bundle:nil];
    Item3 *itm3 = [[Item3 alloc] initWithNibName:@"item3" bundle:nil];
    [menuItems addObject:itm1];
    [menuItems addObject:itm2];
    [menuItems addObject:itm3];
}

将此方法调用 mainViewController的 viewDidLoad

希望这会有所帮助