gpt4 book ai didi

ios - 从 segue 初始化目标 View Controller 中状态的正确方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:04:25 26 4
gpt4 key购买 nike

我有一个带有简单“钻取”模式的应用程序。我以 map 模式或列表模式显示项目列表。单击其中一个会进入更详细的“编辑” View Controller 。我的编辑 Controller 有

@property (assign, nonatomic) BOOL showMap;

并且在源代码实现 setter/getter 方法中:

#pragma mark - Properties
- (BOOL) showMap {
return self.viewModeSegments.selectedSegmentIndex == 1;
}

- (void) setShowMap: (BOOL) showMap {
self.view; // had to add this, it's a hack
self.viewModeSegments.selectedSegmentIndex = showMap ? 1 : 0;
}

我在启动 Controller 中设置此属性:

#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"ValveEditSegue"]) {
ValveEditController* controller = segue.destinationViewController;
controller.valve = self.selections.anyObject;
controller.showMap = ShowMap;
}
}

我发现,showMap setter 发生在 view 被填充之前,所以 viewModeSegments 仍然是 nil 。我试验了 setter 中显示的 hack,它强制访问 self.view 以确保它已加载。但这似乎是个坏主意。我不知道的是,我应该改用什么模式。

我可以使 showMap 成为一个带有支持的普通属性,然后在 viewDidLoad 时将该状态镜像到小部件中,但是拥有一个属性/状态似乎很愚蠢只是为了那一次像蹦床一样的效果。

最佳答案

那真的是另一种选择......

潜在的问题是您将 View (或 subview )用作知识的容器,而实际上不应该将其用于此。 View 用于展示知识,而不是拥有该知识。

更广泛地说,滥用 View 及其提供的属性通常很有吸引力,例如 View tag、单元格选择状态等,因为“额外”存储该信息似乎简单且浪费其他地方也是如此 - 但这并不意味着这样做是正确的。

Controller 负责维护显示内容的状态信息,因此您应该将该信息存储在 Controller 的属性中并在那里维护(使用它来更新 View ,不要查询关于其状态的 View )。

关于ios - 从 segue 初始化目标 View Controller 中状态的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24617636/

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