Iphone UIButton和setImage:工作不一致-不一致

Iphone UIButton和setImage:工作不一致-不一致,iphone,uiview,uibutton,Iphone,Uiview,Uibutton,我在UIView上有一个UIButton。我想通过编程确定在显示视图时按钮内显示的图像。我已经在UIView中重写了drawRect方法,并使用setImage来显示所需的图像。但是,当视图显示时,有时会绘制所需的图像,有时则不会。我必须触摸视图中的任何位置,才能在按钮中显示图像。请帮忙 下面是视图的drawRect方法 - (void)drawRect:(CGRect)rect { [myButton setImage:[UIImage imageNamed:@"myImage.png"] f

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

下面是视图的drawRect方法

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

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

您真的不想覆盖drawRect

正确的做法是实现UIViewController并重写

土拨鼠有这样的功能,但我只想解释一下你的代码到底发生了什么,以及为什么它有时会工作


每当系统希望视图对象在屏幕上显示时,就会调用
drawRect
方法。在
drawRect
方法中设置按钮图像将更改按钮图像,但由于系统已经在屏幕上绘制,因此在下次需要重新绘制视图之前,您实际上不会看到更改。在这种情况下,当您触摸视图中的其他位置时。

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

- (void)drawRect:(CGRect)rect
{
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
}
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
在将我的UIView添加为子视图之前。即:

[masterViewController.view addSubview:myView];

显然,myButton是myView的一部分。谢谢你的帮助。

谢谢你的解释。不幸的是,这段代码是另一个开发人员的大型项目的一部分。我无法将当前UIView更改为UIViewController。我可以用另一种方式更改按钮图像吗?(例如,在添加所属ViewController的子视图之前?例如,在我发出[masterViewController.view addSubview:myView]之前);当然可以。以编程方式设置按钮图像通常在
视图中完成,但如果您使用的是不同的初始化方法,则可以在那里执行。只要您不在
drawRect
方法中放入任何初始化代码,就可以了。宾果!这非常有效!非常感谢您和土拨鼠。你们是G-R-E-A-T。(同样,对于在这个论坛上获得的荣誉,我很抱歉,但是,我不想在不表达我的感谢的情况下放弃这个帖子。)很高兴听到这个消息!一定要给土拨鼠一个被接受的答案。这将很好地结束事情。祝你的项目顺利:)