我正在构建的应用程序需要在UITabBarController框架内显示多个视图(及其子视图)的共享自定义UIToolbar。所有视图中自定义工具栏的内容都相同。我希望能够将自定义工具栏设计为xib并从其自己的控制器类处理UI事件(我假设我可以将UIToolbar子类化这样做吗?)。这样我就可以定义IBOutlet& IBAction项目等。然后我可以将此自定义工具栏与每个UITabBarController视图(及其子视图)相关联。但是我很难发现这是否可能 - 如果是的话,该怎么做。
特别是,我希望能够将新视图推送到UINavigationController视图堆栈,每个视图堆栈都与父UITabBarController选项卡相关联。总而言之,我想要一个:
标签栏控制器本身是以模态方式启动的,但我不认为这是相关的。
无论如何,标签栏控制器和儿童导航控制器一样正常工作。我只是在弄清楚如何将共享工具栏保存到各种子视图时遇到一些麻烦。我很乐意以编程方式实现一种干净的方式...虽然我更喜欢将工具栏的视觉设计保持在xib中的灵活性。
任何人都有任何建议
答案 0 :(得分:4)
我相信我有“答案”......而且这很简单,我很尴尬,以前我没有想到它。创建UIViewController的自定义子类,在其中设置UINavigationController工具栏的属性(在IB中的xib中设置为enabled)。然后,从您希望包含该工具栏的任何其他视图中,您只需将该类子类化。在我的例子中,我命名了UIViewController的ChallengeToolbar子类,然后我做了这个:
UIImage *vaultImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"goldbar" ofType:@"png"]];
UISegmentedControl *vaultButtonControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:vaultImage, nil]];
vaultButtonControl.segmentedControlStyle = UISegmentedControlStylePlain;
vaultButtonControl.momentary = YES;
[vaultButtonControl addTarget:self action:@selector(goNavVault:) forControlEvents:UIControlEventAllEvents];
UIBarButtonItem *vaultButton = [[UIBarButtonItem alloc] initWithCustomView:vaultButtonControl];
vaultButton.customView.frame = CGRectMake(0,0,40,20);
UIBarButtonItem *invite = [[UIBarButtonItem alloc] initWithTitle:@"Invite" style:UIBarButtonItemStyleBordered target:self action:@selector(goNavVault:)];
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *items = [NSArray arrayWithObjects: invite, flexItem, flexItem, flexItem, vaultButton, nil];
[self setToolbarItems:items animated:NO];
[vaultButtonControl release];
[vaultButton release];
[invite release];
[flexItem release];
...在viewDidLoad方法中。然后,从我希望我的工具栏出现的任何视图中,我只需设置视图的控制器类来继承我的ChallengeToolbar类而不是UIViewController。 DUH!
答案 1 :(得分:1)
一些初步想法。
您可能希望将此工具栏保留在标签栏的范围之外,只是将工具栏中发生的事件传播到屏幕上的视图。
目前,工具栏正在管理多个视图,我不相信你可以将组件浮动在控制器内的特定视图之上。
我通常编写我的UI编程,因此我可以进行精确控制,所以我不能说从Interface Builder管理它是多么容易。