我正在 iPhone 中开发基于导航的应用程序。
我想在其中创建物理菜单按钮,如 Android 手机中的菜单。
可以从层次结构中的任何视图访问该菜单。
有没有人知道我们如何才能做到这一点。
我们可以向 UINavigationBar 添加一个类似菜单的抽屉吗?
请不要建议 tabbarcontroller,因为它是最后一个选项。
我正在 iPhone 中开发基于导航的应用程序。
我想在其中创建物理菜单按钮,如 Android 手机中的菜单。
可以从层次结构中的任何视图访问该菜单。
有没有人知道我们如何才能做到这一点。
我们可以向 UINavigationBar 添加一个类似菜单的抽屉吗?
请不要建议 tabbarcontroller,因为它是最后一个选项。
我认为你想要的只是将 UINavigationItem 的 titleView 设置为任意 UIView 来处理用户点击。
这不一定是文本标签:)
如果是这种情况,那么我建议您sharedInstance
使用跟踪视图控制器堆栈层次结构的标志。每次用户导航时,只需更新您的sharedInstance
并进行自定义菜单准备并填充它。好的做法是重用您的 UI 组件,而不是在每次导航操作中都使用它。
你应该做的是创建一个子类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];
您可以创建一个 " DrawerView
" 类并将其导入到您想要使用它的位置。然后你可以使用presentModalViewController: myDrawer
它来让它在你需要的时候出现。希望这是有道理的。
它非常简单..
在一个 XIB 中,您可以添加许多视图。现在添加两个主要视图,比如你想要的数据视图和向下侧按钮视图。(如果 mnt wronge 有 4 个按钮进行导航)现在将这个视图保持在顶部。以及您可以在该数据视图中添加的所有其他视图层次结构。
我认为您应该为此创建一个单UIViewController
例UIView
。的优点UIViewController
是它可以与presentModalViewController:animated:
方法一起呈现,并且如果您需要,您可以将其推送到您的导航堆栈。您同时拥有一个UIView
实例也是一个优势。
使用单例模式,您可以在任何地方访问您的班级。
查看官方文档中关于objective-c中单例的链接:Creating a Singleton Instance
或者你可以使用Matt Gallagher的宏(因为这使用起来很舒服):Singleton macro
如果你能获得 iOS 5 测试版,我强烈推荐它。新的 beta 开发版本有一个扩展UIViewController
,被 Apple 称为容器视图控制器。它们很容易设置,我在我的应用程序中使用了一个。
容器视图控制器的工作方式类似UINavigationControllers
,UITabBarControllers
因为它们允许您添加子视图控制器,而不仅仅是子视图。就像我说过的,它们很容易设置。我将解释如何:
创建一个名为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];
}
我们添加导航控制器的原因是因为它阻止了这个容器控制器进行转换,这更复杂。
在ContainerController
'sviewDidLoad
方法中,创建菜单:
[super viewDidLoad];
UIView *menuWrapperView = [[[UIView alloc] init] autorelease];
menuWrapperView.frame = CGRectMake(0, 420, 320, 40); // Place a wrapper for the menu buttons directly below the navigation controller
UIButton *button1 = ...;
UIButton *button2 = ...;
[menuWrapperView addSubview:button1];
[menuWrapperView addSubview:button2];
[self.view addSubview:menuWrapperView];
使用这种方法(使用子视图控制器),您的视图和导航控制器将在需要时获得所需的内存警告、视图加载和旋转处理方法调用。