2

我的 viewdidload 中有以下内容:

    //Start/Pause Button    
    UIButton *buttonStart = [UIButton buttonWithType: UIButtonTypeCustom];
    buttonStart.frame = CGRectMake(10,100,100,45);
    [buttonStart setBackgroundImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
    [buttonStart addTarget:self action:@selector(pausePlayButtonTouched) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview: buttonStart];

我的选择器方法:

   [self.buttonStart setBackgroundImage:[UIImage imageNamed:@"start.png"] forState:UIControlStateNormal];

    NSLog(@"%@", self.buttonStart);

null 正在记录到控制台。不用说,按钮的图像没有改变。

我的想法有什么问题?

顺便说一句 buttonStart 正在合成并具有自己的属性(保留)。

4

5 回答 5

4

您同时使用了一个self.buttonStart通过属性访问的实例变量和一个局部变量buttonStart。从您的实现文件中删除该按钮的声明并将第一行更改为:

self.buttonStart = [UIButton buttonWithType: UIButtonTypeCustom];
于 2012-08-21T10:12:16.180 回答
4

buttonStart.Add 目标不需要这样的属性:

     [buttonStart addTarget:self action:@selector(pausePlayButtonTouched:) forControlEvents:UIControlEventTouchUpInside];

现在您选择的方法是:

-(void)pausePlayButtonTouched:(id)sender
{
   UIButton *btnPaused = sender;
   NSLog(@"%@", btnPaused);
   [btnPaused setBackgroundImage:[UIImage imageNamed:@"start.png"] forState:UIControlStateNormal];
}
于 2012-08-21T10:15:38.223 回答
0

您是否在任何地方分配 self.buttonStart ?你的意思是

 self.buttonStart = [UIButton buttonWithType: UIButtonTypeCustom];

代替

  UIButton *buttonStart = [UIButton buttonWithType: UIButtonTypeCustom];
于 2012-08-21T10:12:33.730 回答
0

您应该从文件名中删除“.png”标签,即“pause”,而不是“pause.png”。

于 2012-08-21T10:14:45.067 回答
0

据我所见, buttonStart 的分配丢失了。

你设置了 self.buttonStart = buttonStart; ?

声明 UIButton *buttonStart = ... 将隐藏(在您的本地上下文中)由 @property (nonatomic, reatin) UIButton *buttonStart 创建的任何已创建成员;(如果您使用 LLVM 4.0+,您的属性声明将创建“UIButton *_buttonStart”作为成员)

于 2012-08-21T10:16:45.837 回答