3

我在 UIView 上有一个 UIButton。我想以编程方式确定在显示视图时要在按钮内显示的图像。我已经覆盖 UIView 中的 drawRect 方法并使用 setImage 来显示所需的图像。但是,当视图显示时,有时它会绘制所需的图像,有时则不会。我必须触摸视图中的任何位置,图像才能显示在按钮中。请帮忙 !

这是视图的 drawRect 方法。

- (void)drawRect:(CGRect)rect
{
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
}

一切都正确连接了 IB。我不明白为什么图像出现/不一致。非常感谢。

4

3 回答 3

5

你真的不想覆盖drawRect。

正确的做法是实现 UIViewController,并覆盖viewWillAppear:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
};
于 2009-08-02T22:03:33.267 回答
2

土拨鼠有正确的答案,但我只想解释一下您的代码实际发生了什么,以及为什么它有时会起作用。

drawRect每次系统希望您的视图对象在屏幕上显示时,都会调用该方法。在drawRect方法中设置按钮图像改变按钮图像,但是由于系统已经在绘制到屏幕的过程中,所以直到下次需要重绘视图时才能真正看到变化。在这种情况下,当您触摸视图中的其他位置时。

于 2009-08-02T23:21:31.643 回答
1

感谢您的解释。不幸的是,这段代码是另一个开发人员的一个更大项目的一部分。我无法将当前 UIView 更改为 UIViewController。相反,我以另一种方式更改了按钮图像。在将 UIView 添加到拥有 ViewController 的子视图之前,我更改了按钮的状态。即:我发布了

[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];

就在将我的 UIView 添加为子视图之前。IE:

[masterViewController.view addSubview:myView];

显然,myButton 是 myView 的一部分。感谢您的协助。

于 2009-08-04T13:02:54.850 回答