1

我有一个带有子视图的 VC。在subview level我有一个按钮。我希望按钮导致视图被更新。

IBAction代码在VC中。它目前所做的只是切换一个BOOL值。

回到子视图 drawRect: 方法是测试BOOL并相应更改视图的代码。

我的观察是,当按下按钮时,IBAction 代码运行,切换BOOL,但该drawRect:方法没有被调用。

我尝试手动调用 drawRect (不好的做法,没有工作)。我尝试调用 setNeedsDisplay 但这也不起作用(无法弄清楚如何引用以编程方式创建的子视图)。

欢迎提出建议。

IBAction 代码很简单,但包含在下面:

- (IBAction)rotateWindowButtonWasPressed:(id)sender
{
    // just flip the boolean here. Need to make the code change in drawRect: in top2View.m
    if ([myGlobals gWinVertical])
        [myGlobals setGWinVertical:NO];
    else
        [myGlobals setGWinVertical:YES];
    // Hoping this would force a redraw, but bounds have to change...:(
    //_top2ViewOutlet.contentMode = UIViewContentModeRedraw;
}
4

2 回答 2

10

要发出 drawRect 调用,请调用setNeedsDisplay您更改的视图。操作系统将在其上调用 drawRect 并自动影响重叠视图。

在你的情况下,我认为

[self.view setNeedsDisplay]

于 2013-02-26T08:17:09.807 回答
0

不知道发生了什么 - 上面有一个答案解决了我的问题,但现在它消失了?无论如何 - 答案是以编程方式创建按钮,然后我可以在 drawRect: 所在的子视图级别包含该方法,并使用 setNeedsDisplay 重新绘制屏幕。这与使用 IB 并在 VC 级别拥有 IBAction 代码。

于 2013-02-27T06:22:22.207 回答