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 は合成されており、独自のプロパティ (retain) を持っています。

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

私が見る限り、buttonStart の割り当てがありません。

self.buttonStart = buttonStart; を設定しましたか。?

UIButton *buttonStart = ... を宣言すると、@property (nonatomic, reatin) UIButton *buttonStart; によって作成されたすべての作成済みメンバーが (ローカル コンテキストで) シャドウされます。(LLVM 4.0+ を使用している場合、プロパティ宣言は "UIButton *_buttonStart" をメンバーとして作成します)

于 2012-08-21T10:16:45.837 に答える
0

self.buttonStart をどこかに割り当てていますか? もしかして

 self.buttonStart = [UIButton buttonWithType: UIButtonTypeCustom];

それ以外の

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

ファイル名から「.png」タグを削除する必要があります。つまり、「pause.png」ではなく「pause」です。

于 2012-08-21T10:14:45.067 に答える