由多个视图共享的iPhone工具栏
我正在构建的应用程序需要在UITabBarController框架内显示多个视图(及其子视图)的共享自定义UIToolbar。自定义工具栏的内容在所有视图中都是相同的。我希望能够将自定义工具栏设计为xib,并从其自己的控制器类处理UI事件(我假设可以将UIToolbar子类化来实现这一点)。这样我就可以定义IBOutlet和IBAction项等。然后我就可以将这个自定义工具栏与每个uitabarcontroller视图(及其子视图)关联起来。但我很难确定这是否可能——如果可能,怎么做 特别是,我希望能够将新视图推送到UINavigationController视图堆栈上,每个视图堆栈都与父UITabBarController选项卡关联。总之,我想要一个:由多个视图共享的iPhone工具栏,iphone,objective-c,cocoa,cocoa-touch,uitoolbar,Iphone,Objective C,Cocoa,Cocoa Touch,Uitoolbar,我正在构建的应用程序需要在UITabBarController框架内显示多个视图(及其子视图)的共享自定义UIToolbar。自定义工具栏的内容在所有视图中都是相同的。我希望能够将自定义工具栏设计为xib,并从其自己的控制器类处理UI事件(我假设可以将UIToolbar子类化来实现这一点)。这样我就可以定义IBOutlet和IBAction项等。然后我就可以将这个自定义工具栏与每个uitabarcontroller视图(及其子视图)关联起来。但我很难确定这是否可能——如果可能,怎么做 特别是,我
- 自定义工具栏
- 由多个视图共享
- 由多个导航控制器管理
- 导航控制器与父选项卡栏控制器的不同选项卡相关联
任何人都有任何建议一些初步想法 您可能希望将此工具栏保持在选项卡栏范围之外,并将发生的事件从工具栏传播到屏幕上的视图 目前,工具栏正在管理多个视图,我不相信您可以将组件浮动在控制器内特定视图的顶部
我通常编写UI程序,以便能够进行精确控制,因此我无法说从Interface Builder管理它有多容易 一些初步想法 您可能希望将此工具栏保持在选项卡栏范围之外,并将发生的事件从工具栏传播到屏幕上的视图 目前,工具栏正在管理多个视图,我不相信您可以将组件浮动在控制器内特定视图的顶部 我通常编写UI程序,以便能够进行精确控制,因此我无法说从Interface Builder管理它有多容易 我相信我有“答案”。。。这很简单,我很尴尬,我以前没有想到。创建UIViewController的自定义子类,在其中设置UINavigationController工具栏的属性(从IB中的xib中设置为启用)。然后,从您希望包含该工具栏的任何其他视图中,您只需对该类进行子类化。在我的例子中,我命名了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。哼 我相信我有“答案”。。。这很简单,我很尴尬,我以前没有想到。创建UIViewController的自定义子类,在其中设置UINavigationController工具栏的属性(从IB中的xib中设置为启用)。然后,从您希望包含该工具栏的任何其他视图中,您只需对该类进行子类化。在我的例子中,我命名了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。哼 更新。。。我一直在尝试将传递给[self-setToolbarItems:items animated:NO]的数组内容存储在由我的主应用程序代理保留的单例中。。。但我遇到了一些问题。我相信这个想法很愚蠢是有原因的。如果我真的知道我在做什么,我肯定我很清楚为什么。更新。。。我一直在尝试将传递给[self-setToolbarItems:items animated:NO]的数组内容存储在由我的主应用程序代理保留的单例中。。。但我遇到了一些问题。我相信这个想法很愚蠢是有原因的。如果我真的知道我在做什么,我肯定我很清楚为什么。谢谢你的回复。。。在这一点上,即使是这样的一般反馈对我来说也是有价值的。即使知道更有经验的objective-c程序员不会立即看到解决方案,也是有帮助的。如果我知道世上没有我不知道的琐碎的解决方案,我会发现花上几天的时间来找到解决方案会让我更容易接受。谢谢你的回复。。。在这一点上,即使是这样的一般反馈对我来说也是有价值的。即使知道更有经验的objective-c程序员不会立即看到解决方案,也是有帮助的。如果我知道世上没有我不知道的琐碎的解决方案,我会发现花上几天的时间来找到解决方案会更容易接受。