Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由多个视图共享的iPhone工具栏_Iphone_Objective C_Cocoa_Cocoa Touch_Uitoolbar - Fatal编程技术网

由多个视图共享的iPhone工具栏

由多个视图共享的iPhone工具栏,iphone,objective-c,cocoa,cocoa-touch,uitoolbar,Iphone,Objective C,Cocoa,Cocoa Touch,Uitoolbar,我正在构建的应用程序需要在UITabBarController框架内显示多个视图(及其子视图)的共享自定义UIToolbar。自定义工具栏的内容在所有视图中都是相同的。我希望能够将自定义工具栏设计为xib,并从其自己的控制器类处理UI事件(我假设可以将UIToolbar子类化来实现这一点)。这样我就可以定义IBOutlet和IBAction项等。然后我就可以将这个自定义工具栏与每个uitabarcontroller视图(及其子视图)关联起来。但我很难确定这是否可能——如果可能,怎么做 特别是,我

我正在构建的应用程序需要在UITabBarController框架内显示多个视图(及其子视图)的共享自定义UIToolbar。自定义工具栏的内容在所有视图中都是相同的。我希望能够将自定义工具栏设计为xib,并从其自己的控制器类处理UI事件(我假设可以将UIToolbar子类化来实现这一点)。这样我就可以定义IBOutlet和IBAction项等。然后我就可以将这个自定义工具栏与每个uitabarcontroller视图(及其子视图)关联起来。但我很难确定这是否可能——如果可能,怎么做

特别是,我希望能够将新视图推送到UINavigationController视图堆栈上,每个视图堆栈都与父UITabBarController选项卡关联。总之,我想要一个:

  • 自定义工具栏
  • 由多个视图共享
  • 由多个导航控制器管理
  • 导航控制器与父选项卡栏控制器的不同选项卡相关联
选项卡栏控制器本身是以模式启动的,尽管我认为这与此无关

无论如何,选项卡栏控制器正在工作,其子导航控制器也在工作。我只是在弄清楚如何将共享工具栏持久化到各个子视图时遇到了一点麻烦。我会接受一种很好的干净的编程实现方式。。。尽管我更喜欢将工具栏的视觉设计保持在xib中的灵活性


任何人都有任何建议

一些初步想法

您可能希望将此工具栏保持在选项卡栏范围之外,并将发生的事件从工具栏传播到屏幕上的视图

目前,工具栏正在管理多个视图,我不相信您可以将组件浮动在控制器内特定视图的顶部


我通常编写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程序员不会立即看到解决方案,也是有帮助的。如果我知道世上没有我不知道的琐碎的解决方案,我会发现花上几天的时间来找到解决方案会更容易接受。