UIButton和setImage:不一致 - 不一致

时间:2009-08-02 21:05:57

标签: iphone uiview uibutton

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

以下是视图的drawRect方法。

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

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

3 个答案:

答案 0 :(得分:5)

你真的不想覆盖drawRect。

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

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
};

答案 1 :(得分:2)

groundhog有right answer,但我想解释一下你的代码实际发生了什么,以及为什么它在某些时候有用。

每次系统希望您的视图对象在屏幕上显示时,都会调用drawRect方法。在drawRect方法中设置按钮图像将更改按钮图像,但由于系统已经在绘制到屏幕的过程中,因此在< em> next 时间需要重绘视图。在这种情况下,当您触摸视图中的其他位置时。

答案 2 :(得分:1)

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

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

在将我的UIView添加为subView之前。即:

[masterViewController.view addSubview:myView];
显然,myButton是myView的一部分。谢谢你的帮助。