用于触发drawRect以重绘视图的按钮

时间:2013-02-26 08:11:35

标签: ios xcode drawrect ibaction setneedsdisplay

我有一个带有子视图的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;
}

2 个答案:

答案 0 :(得分:10)

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

在你的情况下我认为

[self.view setNeedsDisplay]

答案 1 :(得分:0)

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