在充当代表的视图之间创建共享工具栏
使用Xcode 9.1&Storyboards,我试图创建一个应用程序,根视图控制器包含后续内容的容器视图,以及我想要在所有正在加载的内容之间共享的几个按钮。 我正在寻找来自任何试图在我的方法上做类似的事情的人的建议。
第一个视图的容器视图加载一个导航控制器,以处理视图堆栈和细节。
这是基本的布局:
我正在考虑像这样使用Container View,因为它有点像导航控制器在每个视图上显示其工具栏,但不必为每个视图重新创建每个按钮。
我的意图是让每个子视图(当可见时)成为父按钮栏的代表,这样,无论何时选择了Exit或Prev / Next(</>)按钮,他们都会得到通知并可以采取相应的行动。 根视图控制器不会负责将每个视图加载到导航控制器中,并且按钮的行为(特别是下一步按钮)将取决于当前加载的视图。
为此,我在根视图控制器.h中创建了一个协议,使用SO上别处找到的答案:
@protocol RootViewControllerToolbarDelegate;
并定义了界面:
@protocol RootViewControllerToolbarDelegate <NSObject>
@optional
- (void)rootViewController:(RootViewController*)viewController
didChooseButton:(ToolbarButtonType)toolbarButtonType;
ToolbarButtonType
是一个简单的枚举。 在根(父)的相应.m文件中,我为这些按钮设置了一个IBAction,并在此范围内通知任何已注册的代表:
id<RootViewControllerToolbarDelegate> strongDelegate = self.delegate;
if ([strongDelegate respondsToSelector:@selector(rootViewController:didChooseButton:)]) {
[strongDelegate rootViewController:self didChooseButton:([sender tag] == 1 ? ToolbarButtonPrevious : ToolbarButtonNext)];
}
在随后的视图中 - 加载到导航控制器(位于根视图控制器的容器视图内) - 我已经设置了一个测试,以便.h实现我在根中创建的委托,将自我指派给委托viewDidLoad中:
RootViewController *rvc = (RootViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rvc.delegate = self;
然后定义委托方法来处理该操作。
- (void)rootViewController:(RootViewController*)viewController
didChooseButton:(ToolbarButtonType)toolbarButtonType{
switch (toolbarButtonType){
case ToolbarButtonNext: { //test
MyNextViewToLoad *emv = [self.storyboard instantiateViewControllerWithIdentifier:@"sbIdMyNextView"];
[self.navigationController pushViewController:emv animated:YES];
break;
}
default: break;
}
}
至少在这个简单的测试中,这一切都起作用,但我有问题:
非常感谢您的建议。
链接地址: http://www.djcxy.com/p/52411.html上一篇: Creating a shared toolbar across views that act as delegates
下一篇: State Preservation for View Controllers with Custom Delegates or Data Sources