1

我目前正在从事一个涉及 Inferis 的 ViewDeck 的项目。

我正在寻找创建 Facebook 风格的菜单界面。但是我似乎无法设法将标题栏保持在本地而不是全局用于deckController。

所以基本上,我有一个 rootviewcontroller,它将登录视图控制器推送到堆栈上。没有什么花哨。但是当我登录时,它需要将 IIViewDeckController 推送到堆栈上,但没有所有导航栏

它是如何编码的:

neighbourhoodViewController *nextViewController = [[neighbourhoodViewController alloc] initWithNibName:@"neighbourhoodViewController" bundle:nil];
menuViewController *leftViewController = [[menuViewController alloc]  initWithNibName:@"menuViewController" bundle:nil];
IIViewDeckController* deckController =  [[IIViewDeckController alloc] nitWithCenterViewController:nextViewController leftViewController:leftViewController];
deckController.leftSize = 100.0f;
[self.navigationController pushViewController:deckController animated:YES];

结果是以下屏幕截图: http://s15.postimg.org/pli8zk53f/Schermafbeelding_2013_05_22_om_15_00_43.png

如您所见,菜单是“在 viewcontroller 中”但它需要在外面,所以导航栏应该与中间的 TableViewController 一起向右滑动

我试图隐藏所有导航栏,但似乎没有任何效果。我也尝试从应用程序委托启动它,因为这在示例中。有用。但是,我需要从登录视图控制器运行它。

谢谢

4

1 回答 1

2

你需要稍微重新排列你的结构。

使 IIViewDeckController 成为您应用程序的 rootViewController 并将其 centerController 设置为您的 UINavigationController。

让您的 LoginViewController 在开始时成为您的 UINavigationController 的 topViewController,从而显示登录视图以开始。如果您不想在登录时看到 NavigationBar,请将其添加到 LoginViewController:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

要在登录时阻止任何 ViewDeck 操作,请在 ViewDeck 的委托中执行此操作:

- (BOOL)viewDeckController:(IIViewDeckController*)viewDeckController shouldOpenViewSide:(IIViewDeckSide)viewDeckSide {
    UINavigationController *navController = (UINavigationController*)self.centerController;

    if([[navController viewControllers] count] < 2) {
        return NO;
    }

    return YES;
}

显然,当用户成功登录时,您只需将“neighbourhoodViewController”推送到堆栈上。当他们注销时,再次将其弹出。

于 2013-05-22T13:21:14.187 回答