0

我的应用程序包含带有 5 个视图控制器的 TabBar 控制器。可以单击每个视图控制器中的按钮,这将弹出另一个视图,用户可以在其中选择设置。该按钮(被单击)应该根据每个视图控制器中的选择设置更改其背景。因此,如果用户单击 VC1 中的按钮并选择设置,则此信息应传播到所有其他 VC,以便按钮具有相同的背景。

我正在使用情节提要,并且我知道这很容易在 2VC 之间使用 segue、协议、闭包......我找不到将信息传播到超过 2VC 的正确方法。

我能想到的唯一解决方案是使用 UserDefaults。我将保存有关按钮设置的信息,然后在每个 VC 中调用 ViewWillAppear,其中将根据 UserDefaults 中的值设置按钮的背景。请问有更好的解决方案吗?

编辑:

正如评论中提到的@cora,我能够使用通知中心解决这个问题。

4

3 回答 3

2

您有多种选择,包括:

  • 将一组选项卡控制器传递给您的“弹出设置”控制器,并直接在每个控制器中调用“settingSelected”函数。
  • 使用协议/委托模式,您可以在“弹出设置”控制器中创建一个委托数组。
  • 您可以使用通知中心。
  • 您可以将按钮子类化并使用UIAppearance代理。

使用哪种方法取决于许多因素,具体取决于您需要做的所有事情(还有其他“设置”吗?还是只有那个按钮背景?)

您可能想要搜索swift using themes以查看各种不同的方法。

于 2021-03-06T15:17:15.863 回答
0

“请问有更好的解决方案吗?”</p>

不必要。这实际上是用户默认设置,在启动之间保留吗?那么这正是用户默认值的用途。

如果没有,那么至少您需要一些可以存储有关当前按钮颜色信息的中心位置。一个明显的候选者是标签栏控制器本身。每次有标签栏项目切换时都会收到通知,因此它是一个完美的候选者。

于 2021-03-06T16:43:57.670 回答
-1

由于您提到您正在使用 UITabbarController,因此您可以使用 UITabbarController 的实例,然后访问它的 .viewControllers 属性并调用它们添加的公共方法以在您添加的事件上触发它们。此外,使用通知中心对我来说更有意义,因为您的代码将更具可读性。有时,通知可能会让正在处理您的代码的新开发人员感到有些困惑。

于 2021-03-06T17:21:45.363 回答