如何在iPhone中创建物理菜单按钮(如Android中的那个)菜单?

时间:2011-09-05 06:11:47

标签: iphone android-menu

我正在iPhone中开发基于导航的应用程序。

我想在其中创建像Android手机中那样的菜单按钮等物理菜单按钮。

可以从层次结构中的任何视图访问菜单。

任何人都知道我们怎样才能做到这一点。

我们可以在UINavigationBar中添加类似菜单的抽屉吗?

请不要建议使用tabbarcontroller,因为它是最后一个选项。

7 个答案:

答案 0 :(得分:1)

我认为您想要的只是将UINavigationItem的titleView设置为任意UIView来处理用户点击。

这不一定是文字标签:)

答案 1 :(得分:1)

如果是这种情况,那么我建议你带sharedInstance跟踪视图控制器堆栈层次结构的标志。每次用户导航时只需更新您的sharedInstance并进行自定义菜单准备并填充它。好的做法是重用您的UI组件,而不是在每次导航操作时都使用它。

答案 2 :(得分:1)

您应该做的是创建UIViewController的子类,例如MasterViewController。让所有视图控制器都为MasterViewController子类。在MasterViewController中,您可以编写代码来创建和显示抽屉视图,然后所有视图控制器都将继承该代码,并且可以随时调用它。

要滑动视图:

drawerView.frame = CGRectMake(0, -1*drawerView.frame.size.height, self.view.frame.size.width, whateverHeight);
[UIView beginAnimations:nil context:NULL];
drawerView.frame = CGRectMake(0, 0, self.view.frame.size.width, whateverHeight);
[UIView commitAnimations];

答案 3 :(得分:0)

您可以创建“DrawerView”类并将其导入到您想要使用它的位置。然后,您可以使用presentModalViewController: myDrawer在需要时将其显示出来。希望这是有道理的。

答案 4 :(得分:0)

非常简单..

在一个XIB中,您可以正确添加许多视图。现在添加两个主要视图,比如数据视图和你想要的下方按钮视图。(如果有4个按钮导航的wron)现在保持你的这个视图在顶部。以及您可以在该数据视图中添加的所有其他视图。

答案 5 :(得分:0)

我认为你应该为此创建一个单身UIViewControllerUIViewUIViewController的优点是可以使用presentModalViewController:animated:方法显示,如果需要,也可以将其推送到导航堆栈。同时具有UIView实例的优势还在于 使用单身模式,您可以在任何地方到达您的班级。

从objective-c中的单身人士官方文档中查看此链接:Creating a Singleton Instance
或者你可以使用Matt Gallagher的宏(因为这非常适合使用):Singleton macro

答案 6 :(得分:0)

如果你能获得iOS 5测试版,我强烈推荐它。新的beta版本在UIViewController上有一个扩展名,由Apple称为容器视图控制器。它们很容易设置,我在我的应用程序中使用它。

容器视图控制器的工作方式类似于UINavigationControllersUITabBarControllers,因为它们允许您添加子视图控制器,而不仅仅是子视图。就像我说的那样,它们很容易设置。我将解释如何:

  1. 创建一个名为ContainerController的新类。添加名为- (id)initWithNavigationController:(UINavigationController *)controller的初始化方法。它的实现应该是这样的:

    if ((self = [super init])) {
      [self addChildViewController:controller];
      controller.view.frame = CGRectMake(0, 0, 320, 420); // Leave room for the menu at bottom of the screen
      [self.view addSubview:controller.view];
    }
    

    我们添加导航控制器的原因是因为它使这个容器控制器不会进行转换,这更复杂。

  2. ContainerController的{​​{1}}方法中,创建菜单:

    viewDidLoad
  3. 使用这种方法(使用子视图控制器),您的视图和导航控制器将在需要时获得所需的内存警告,视图加载和旋转处理方法调用。