gpt4 book ai didi

ios - 为我的容器 View 创建委托(delegate)

转载 作者:行者123 更新时间:2023-12-01 18:53:25 25 4
gpt4 key购买 nike

我正在尝试创建一个容器 View ,其中容器的 View Controller 可以操作 Root View Controller 上的按钮/标签。

本质上,我试图在我的 View Controller 顶部创建一个自定义导航栏,其中容器的导航决定了后退按钮的标题。后退按钮可以在我的容器 View 中弹出 View Controller 。

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

我的容器的 View Controller 需要能够在点击自定义后退按钮时进行监听。而且我还尝试根据容器 View 呈现的 View Controller 设置后退按钮的标题。谢谢你的任何建议。

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

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

最佳答案

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

Control+从自定义导航中的按钮拖动到对象,然后选择它们应该使用的方法。

在您的 viewDidLoad Root View 的方法,添加:
//Notify the Root View when the button has been pressed
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeView1:) name:@"notifyButtonPressed1" object:nil];

使用它们自己的选择器添加尽可能多的这些以更改 View 。

将此代码放在 Root View 类的底部
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

NSNotificationCenter 监听您的应用程序中的通知以执行操作。它们非常方便,可以节省大量编码,但是它们并不适合每个转换实例。

添加 @property (nonatomic, weak) UIViewController * content到您的 Root View .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);

}

关于ios - 为我的容器 View 创建委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com