如何将全局菜单悬停在所有屏幕上方,就像Path一样

时间:2013-06-20 00:20:31

标签: iphone ios ipad uikit

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

enter image description here

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

我目前采取的方法是:

  1. 创建一个容器视图控制器,使其成为 应用程序的rootViewController
  2. 将功能视图控制器作为子控制器添加到根目录
  3. 将全局菜单创建为视图,将其作为子视图插入到根视图中 控制器的视图,使其显示在其他子视图上方
  4. 当用户在全局菜单中选择一个菜单项时,我需要带上 相应的功能视图控制器的视图到前面,但是 仍位于全局菜单视图下方
  5. 这种方法的缺点是:

    1. 呈现模态视图控制器将阻止全局菜单
    2. 必须预先加载每个功能视图控制器
    3. 简而言之,我设法达到UI / UX期望,但从技术上讲,我觉得我做错了。有没有人有类似的项目经验,请分享你的想法。

3 个答案:

答案 0 :(得分:4)

有两种解决方案,

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

    • (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOption
  2. 然后,您可以将全局菜单添加到导航控制器视图中,例如

    - (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中。然后所有其他viewcontrollers继承BaseViewController。所以一些视图控制器可以有全局菜单。如果某些视图控制器不需要全局菜单,只需继承普通的UIViewController。
    2. ,例如,

      #import "GlobalMenuView.h"
      
      @interface BaseViewController : UIViewController
      {
          UIButton *btnMenu;
          GlobalMenuView *globalMenu;
      }
      
      @end  
      

      然后想要全局菜单的视图控制器,

      #import "BaseViewController.h"
      
      @interface YourOtherViewController: BaseViewController
      {
      
      }
      
      @end
      

答案 1 :(得分:1)

在确定已添加主UIViewController之后,您可以直接将其添加到UIWindow上吗?

答案 2 :(得分:0)

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

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

方法,您可以插入以下代码

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

那应该给你想要完成的东西:)

希望有助于任何