在另一个视图上设置setNeedsDisplay

时间:2014-03-17 22:24:49

标签: ios views

我有一个“设置视图”控制器,用户可以在其中更改MyView视图中绘制内容的某些属性。但是,我无法弄清楚如何在MyView上调用setNeedsDisplay而不是我的SettingsView。

MyView是一个UIView,它有自己的名为MyViewController的控制器。

在这个视图中,我正在绘制一种类型的矩形,并且颜色不同。在SettingsViewController中,我更改了一个参数,该参数会影响在MyView中绘制的矩形类型。但是,为此,用户必须(他们在不同的选项卡上)切换视图,并执行一些操作以便调用setNeedsDisplay。我正在尝试调用setNeedsDisplay FROM SettingsViewController,但我不能做self.view setNeedsDisplay,因为它会在MyView上调用setNeedsDisplay。这更有意义吗?

2 个答案:

答案 0 :(得分:2)

您只需要在要重绘的视图上调用setNeedsDisplay即可。因此,如果您在SettingsViewController,则需要MyViewController的句柄。您在TabBarController中提到了您,因此您可以通过此方式访问该视图。例如(假设MyViewController是第一个选项卡,而你在另一个选项卡中的SettingsViewController中):

[[self.tabBarController.viewControllers[0] view] setNeedsDisplay]

答案 1 :(得分:2)

要问的更好的问题是"我如何设计这个以便我的视图控制器是自包含的并且不依赖于其他视图控制器的层次结构?"

在您的情况下,似乎最好的解决方案可能是使用通知让您的绘图视图控制器知道它需要刷新,因为设置已更改。

在您的设置视图中,controller.h添加:

#define kSettingsChangedNotification @"SettingsChangedNotification"

在“设置”视图控制器中,更新设置后,您可以使用:

[[NSNotificationCenter defaultCenter] postNotificationName:kSettingsChangedNotification
                                                    object:self
                                                  userInfo:nil];

然后在图纸视图控制器中将以下内容添加到viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onSettingsChanged:)
                                             name:kSettingsChangedNotification
                                           object:nil];

最后,在绘图视图控制器中定义onSettingsChanged:

-(void)onSettingsChanged:(NSNotification*)notification
{
    [self.view setNeedsDisplay];
}