1

我需要实现类似路径菜单之类的东西,无论用户留在哪个屏幕,它都可以在应用程序中全局使用。

在此处输入图像描述

请注意,我不是在问如何实现动画/样式设置,我只是对布局菜单交叉视图控制器的正确方法感到好奇。

我目前采取的方法是:

  1. 创建一个容器视图控制器,使其成为应用的rootViewController
  2. 将功能视图控制器作为子控制器添加到根控制器
  3. 将全局菜单创建为视图,将其作为子视图插入到根视图控制器的视图中,使其出现在其他子视图之上
  4. 当用户在全局菜单中选择一个菜单项时,我需要将相应的功能视图控制器的视图放在前面,但仍然在全局菜单视图下方

这种方法的缺点是:

  1. 呈现模态视图控制器将阻止全局菜单
  2. 必须预先加载每个功能视图控制器

简而言之,我设法实现了 UI/UX 预期,但从技术上讲,我觉得我做错了。有没有人有类似的项目经验,请分享您的想法。

4

3 回答 3

4

有两种解决方案,

  1. 您可以将全局菜单添加到 AppDelegate,

    • (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOption

然后您可以将全局菜单添加到导航控制器视图中,例如,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    self.viewController = [[HomeViewController alloc] initWithNibName:nil bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];

    self.navigationController.delegate = self.viewController;
    self.window.rootViewController = self.navigationController;

    // Your Global Menu
    UIButton *myButton ...
    [self.navigationController.view addSubview:myButton];  

    [self.window makeKeyAndVisible];
    return YES;

}
  1. 您可以创建一个 BaseViewController,并将全局按钮添加到 BaseViewController。然后所有其他视图控制器都继承 BaseViewController。所以一些视图控制器可能有全局菜单。如果某些视图控制器不需要全局菜单,只需继承普通的 UIViewController。

如,

#import "GlobalMenuView.h"

@interface BaseViewController : UIViewController
{
    UIButton *btnMenu;
    GlobalMenuView *globalMenu;
}

@end  

然后想要全局菜单的视图控制器就可以了,

#import "BaseViewController.h"

@interface YourOtherViewController: BaseViewController
{

}

@end
于 2013-06-20T06:46:17.510 回答
1

在确保已经添加了主 UIViewController 之后,您可能可以直接将它添加到 UIWindow 上?

于 2013-06-20T00:24:01.647 回答
0

我现在可能没有任何帮助,但是对于您想要实现的目标也有更好的解决方案。您可以做的是子类化一个 UIView 对象,然后在您的应用程序委托类中,在您的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方法,可以插入以下代码

[self.window insertSubview:(UIView) aboveSubview:(UIView)];

这应该给你你想要完成的事情:)

希望对任何人有帮助

于 2013-12-20T00:46:29.347 回答