【问题标题】:IOS: How to change the background image of a button when clicked?IOS:单击时如何更改按钮的背景图像?
【发布时间】:2012-01-26 00:34:47
【问题描述】:

我有一个按钮,当它被点击时,它会改变标签的文本。这是我的控制器模块 (happydaysViewController.m) 中的代码的 sn-p:

#import "happydaysViewController.h"

@implementation happydaysViewController

-(IBAction)button {

    label.text = @"pop tart";
    button.image = @"Costa Rican Frog.jpg";
}

因此,标签文本从空白变为 pop tart,但按钮的背景图像不会从空白变为哥斯达黎加 Frog.jpg。事实上,我得到以下错误:

'按钮'未声明

我是不是以错误的方式处理这个问题?

【问题讨论】:

    标签: iphone ios ios4


    【解决方案1】:

    这段代码有很多错误。我不会列出所有内容,而是向您展示它应该是什么!

    happydaysViewController.h 文件:

    @interface happydaysViewController : UIViewController
    
    @property (nonatomic, strong) IBOutlet UILabel *label;    //in IB drag this to your label
    @property (nonatomic, strong) IBOutlet UIButton *button;    //in IB drag this to your button
    
    -(IBAction)buttonClicked:(UIButton *)sender;    //in IB drag you button to this action
    
    @end
    

    happydaysViewController.m 文件:

    #import "happydaysViewController.h"
    
    @implementation happydaysViewController
    
    @synthesize label;
    @synthesize button;
    
    -(IBAction)buttonClicked:(UIButton *)sender
    {
        label.text = @"pop tart";
        UIImage *image = [UIImage imageNamed:@"Costa Rican Frog.jpg"];
        [sender setImage:image forState:UIControlStateNormal];
    }
    
    @end
    

    所以要解决的问题(不分先后):

    1. 你不能用字符串设置图像值,你需要创建一个 UIImage 对象并将图像文件加载到其中。幸运的是 [UIImage imageNamed:...] 让这变得非常简单。

    2. 按钮可以有多个不同状态(突出显示、选中、禁用等)的图像,因此您必须在设置图像时指定状态。

    3. 您得到的错误表明您实际上没有一个名为 button 的属性,这可能是因为您从未将它添加到您的类中,或者可能是因为您已将 IBAction 方法命名为“button " 并且这与名为 button 的属性的 getter 方法相冲突,该属性也称为 "button"。在我的代码中,我将按钮作为参数传递给 click 方法(如果更改名称,则需要在 IB 中重新绑定按钮),这 a) 提供了另一种获取按钮的方法 b) 更改方法的名称,这样如果您确实想在视图控制器上拥有一个名为 button 的属性,它就不会发生冲突。

    【讨论】:

    • 您还应该考虑一些事情,尝试使用 tiff 或 png 等图像格式。并删除空格。我之前碰巧遇到过 jpg 文件的问题。
    • 不完全正确。请阅读:stackoverflow.com/questions/3929281/… - 基本上将 PNG 用于小图像或具有透明度的图像,将 JPEG 用于不透明的大图像或照片。
    【解决方案2】:

    你必须这样写:

    [[self button] setImage:[NSImage imageNamed:@"Costa Rican Frog.jpg"]];
    

    【讨论】:

    • 适用于 Mac OS。问题是针对 iOS 的。这也是假设他为按钮创建了一个出口,这还不清楚。
    • 你是什么意思创建了一个出口?我只添加了两件事:1)按钮 2)按钮上方的标签。在界面生成器中,我将连接从按钮拖到标签。
    • 您将按钮连接到标签是什么意思?您应该有一个 IBAction buttonClicked: 方法,以及您的 happydaysViewController 类上的两个 IBOutlet @properties,一个是称为按钮的 UIButton,另一个是称为标签的 UILabel,您需要将它们分别拖到 IB 中的按钮和标签上。然后你需要从你的按钮拖到你的 IBAction buttonClicked: 方法。
    • 我已使用 .h 和 .m 文件所需的完整代码更新了我的答案,以便您查看是否缺少任何内容。
    • 尼克,这太不可思议了。谢谢你这么详细。我能够让一切正常工作(然后是一些)。再次感谢!
    【解决方案3】:

    “突出显示”是在控制上触摸进入和退出时发生的控制状态。

    在本例中,我们将以编程方式创建一个 UIButton,该按钮将显示按钮在触摸时发生变化。

    创建一个按钮

    - (void)drawButton
    {
    myButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myButton.frame = CGRectMake(80, 50, 70, 70); //set frame for button
    
    UIImage *buttonImage = [UIImage imageNamed:@"icon6.png"];
    [myButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
    
    [myButton setTitle:@"Ok" forState:UIControlStateNormal];
    [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:myButton];
    
    }
    
    - (void)viewDidLoad {
    [super viewDidLoad];
    
    [self drawButton];
    
    }
    

    编写一个按钮动作,这将改变触摸时的图像

    - (IBAction)buttonClicked:(id)sender 
    {
    
    UIImage *buttonImage = [UIImage imageNamed:@"home.png"];
    [myButton setBackgroundImage:buttonImage forState:UIControlStateHighlighted];
    
    }
    

    在运行应用程序时,您会发现它会在修饰时更改图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2013-04-25
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2011-12-09
      • 2011-07-21
      相关资源
      最近更新 更多