从另一个控制器更改控制器背景

Changing controller background from another controller

我有 3 个控制器 "Home" "LeftNavigation" "Profile"

左导航是通过 "Revealviewcontroller" lib

处理的

家庭控制器有背景图片

- (void)viewDidLoad {
   [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bg_forest.png"]]];
}

我使用 LeftNavigation 进入模态控制器 "Profile"。在 Profile Controller 中有一个 IBAction 按钮,我需要触发它来更改 "Home" Controller

的背景

几件事:

您不应尝试直接更改另一个视图控制器的视图。相反,将 属性 添加到您的主视图控制器以获得背景颜色。

您需要一些方法让配置文件视图控制器获取指向主视图控制器的指针。如果您的主视图控制器始终存在,并且是曾经创建的主视图控制器的唯一实例,您可以将其设为单例(搜索 Objective-C 单例模式)。

然后在您的主页视图控制器的 viewWillAppear 方法中,使用背景颜色 属性 来设置内容视图的背景颜色。这样,如果配置文件视图控制器更改它,主视图控制器会在它显示之前更新它的背景颜色。

正如 Zsolt 勋爵所说,您还可以使用通知或委托(同样,搜索 NSNotificationManager 和 Objective-C 委托设计模式以了解这些。)要使委托模式起作用,您需要设置将主页视图控制器设置为配置文件视图控制器的委托。

如果您使用通知,您将需要一种方法将所需的颜色传递给主视图控制器。您可以使用通知上的 userInfo 参数。