为我的Container View创建委托

时间:2015-04-08 02:46:43

标签: ios objective-c

我正在尝试创建一个容器视图,其中容器的视图控制器可以操作根视图控制器上的按钮/标签。

基本上,我正在尝试在视图控制器的顶部创建一个自定义导航栏,其中容器的导航确定后退按钮的标题。后退按钮可以在容器视图中弹出View Controllers。

我对如何设置代表感到困惑。

我的容器的View Controllers需要能够在点击自定义后退按钮时进行侦听。我还试图根据容器视图呈现的视图控制器来设置后退按钮的标题。谢谢你的任何建议。

我的层次结构看起来像这样。

                          Root View Controller -- Custom Navigation Buttons
                                  |
                             Container View
                                  |
                          Navigation Controller
                                  |
                         Custom View Controller
                                  |
                         Custom View Controller

1 个答案:

答案 0 :(得分:3)

enter image description here

<强>更新

我已经为此制作了一个教程: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);

}