【问题标题】:UIButton and setImage: not working consistently - inconsistentUIButton 和 setImage:工作不一致 - 不一致
【发布时间】:2011-11-02 04:05:10
【问题描述】:

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

这里是视图的drawRect方法。

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

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

【问题讨论】:

    标签: iphone uiview uibutton


    【解决方案1】:

    你真的不想覆盖 drawRect。

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

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

    【讨论】:

      【解决方案2】:

      groundhog 有 right answer,但我只想解释一下您的代码实际发生了什么,以及为什么它有时会起作用。

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

      【讨论】:

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

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

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

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

      [masterViewController.view addSubview:myView];
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多