【问题标题】:Button to trigger drawRect to redraw a view触发drawRect重绘视图的按钮
【发布时间】:2013-02-26 08:11:34
【问题描述】:

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

【问题讨论】:

  • 更漂亮的快捷方式:[myGlobals setGWinVertical:![myGlobals gWinVertical]];

标签: ios xcode drawrect ibaction setneedsdisplay


【解决方案1】:

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

我认为你的情况

[self.view setNeedsDisplay]

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多