gpt4 book ai didi

ios - 实现嵌入在两个独立容器 Controller 中的 View 之间的委托(delegate)

转载 作者:可可西里 更新时间:2023-11-01 03:56:08 27 4
gpt4 key购买 nike

我 Storyboard的相关部分如下所示: http://imgur.com/09livAb您可以看到自定义“容器 Controller ” View 包含两个容器 View ,一个通过嵌入式转场链接到导航 Controller ,另一个通过嵌入式转场链接到自定义“主视图 Controller ”(实现 TableView Controller )。 Navigation Controller 组件还与自定义“Location Filter Controller”有关系。

我需要实现委托(delegate),以便当位置过滤器 Controller 中的一个 UIStepper 是 incr./decr. 时,主视图 Controller 中的 TableView 知道相应地更新它显示的数据。

我不是不习惯使用协议(protocol)/委托(delegate),但是这种在 segues 中的 View 之间进行对话的独特情况真的让我着迷!在大多数情况下,我已经按照此处的示例取得了成功:Passing Data between View Controllers .然而,在这种情况下,我无法像他在“回传数据”第 6 步中指示的那样直接链接实例化 View 。

我曾考虑过使用一个单例对象,每个 View 都可以从中获取/设置必要的数据,但这里的问题是 TableView 不一定知道何时更新其内容,尽管它可以使用数据/应该更新。

这是 ContainerController.m 中的一段代码片段,我在其中设置了嵌入式 segues 以运行:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DataHold *data = [[DataHold alloc] init]; // <-- this actually is a singleton object

if([segue.identifier isEqualToString:@"locationEmbedSegue"])
{

}
else if([segue.identifier isEqualToString:@"tableEmbedSegue"])
{
[[segue destinationViewController] setDelegate:data.detailTableViewController];
// ^ This part actually sets up a delegate so that the table view (Master View Controller)
// delegates to the detail view controller of the overarching split view controller
// and tells it what to display when a row is pressed.
}
}

感谢您的帮助!

最佳答案

我认为您在正确的轨道上将 TableView 委托(delegate)设置为您的位置过滤器 Controller 。

我发现使用嵌入式 View Controller 的一种简单方法是为它们添加“占位符”属性,并在“执行转场”时设置这些属性。

// MyContainerController.h
@property (strong, nonatomic) MyLocationFilterController *detailViewController;
@property (strong, nonatomic) UITableViewController *masterViewController;

// MyContainerController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"locationEmbedSegue"])
{
UINavigationViewController *dest = (UINavigationViewController *)segue.destinationViewController;
self.detailViewController = dest.topViewController;
}
else if([segue.identifier isEqualToString:@"tableEmbedSegue"])
{
self.masterViewController = (UITableViewController *)segue.destinationViewController;
[self.masterViewController.tableView setDelegate:self.detailViewController];
}
}

关于ios - 实现嵌入在两个独立容器 Controller 中的 View 之间的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949387/

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