我正在尝试创建一个容器视图,其中容器的视图控制器可以操作根视图控制器上的按钮/标签。
基本上,我正在尝试在视图控制器的顶部创建一个自定义导航栏,其中容器的导航确定后退按钮的标题。后退按钮可以在容器视图中弹出View Controllers。
我对如何设置代表感到困惑。
我的容器的View Controllers需要能够在点击自定义后退按钮时进行侦听。我还试图根据容器视图呈现的视图控制器来设置后退按钮的标题。谢谢你的任何建议。
我的层次结构看起来像这样。
Root View Controller -- Custom Navigation Buttons
|
Container View
|
Navigation Controller
|
Custom View Controller
|
Custom View Controller
答案 0 :(得分:3)
<强>更新强>
我已经为此制作了一个教程:Custom Navigation。在视频中我使用的是UISegmentedController但是使用了相同的技术。
我会尝试逐步完成如何做到这一点。
创建一个NSObject类并将其命名为ButtonHandler。
创建
等方法//create as many as needed
-(IBAction)handleButton1:(id)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"notifyButtonPressed1" object:self];
}
将NSObject拖到Root View Controller上并将其类设置为ButtonHandler
控制+从自定义导航中的按钮拖动到对象,然后选择应使用的方法。
在根视图的viewDidLoad
方法中,添加以下内容:
//Notify the Root View when the button has been pressed
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeView1:) name:@"notifyButtonPressed1" object:nil];
使用自己的选择器添加尽可能多的内容以更改视图。
将此代码放在Root View Class的底部
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
NSNotificationCenter会在您的应用中侦听通知,以便执行操作。它们非常方便,可以节省大量编码,但它们并不适用于每个转换实例。
将@property (nonatomic, weak) UIViewController * content
添加到您的根视图.h文件和.m文件中,将此方法添加到viewDidLoad
//SET THE NEW CONTENT INSIDE THE ROOT VIEW
-(void)setContent:(UIViewController *)content
{
//CHECK FOR EXISTING CONTENT
if(_content)
{
//IF CONTENT EXISTS, REMOVE IT
[_content.view removeFromSuperview];
[_content removeFromParentViewController];
}
//NOW ADD THE NEW CONTENT AND DISPLAY
_content = content;
[self addChildViewController:_content];
[_content didMoveToParentViewController:self];
[self.view addSubview:_content.view];
}
您需要创建自己的方法来显示和设置内容,或者通过代码创建或分配内容。
这是我显示的方法:
-(void)changeView1: (id) sender
{
//create access to the next view
NSString * storyboardName = @"Main";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"View1"];
NSLog(@"Button 1 pressed");
//set the _content of the declared UIViewController to be the assigned view
self.content = vc;
//THIS SETS THE SIZE AND POSITION OF THE NEW CONTENT
self.content.view.frame = CGRectMake(10, 65, 300, 300);
}