2012-02-09 3 views
0

私はUIButtonの背景画像を最初に設定したアプリケーションを持っており、後でそれを別のものに変更する必要があります。元のボタンを削除して新しいボタンで新しいボタンを割り当てることができますが、私がすでに割り当てたオブジェクトをより効率的に再利用したいと思っています。これは可能ですか?私はcurrentBackgroundImageプロパティが読み取り専用であることに気づいたので、私は同じようなものをしようとすると:UIButtonの背景イメージをリセットすることはできますか?

 [thumbnailButton setBackgroundImage:nil forState:UIControlStateNormal]; 
     [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal]; 

か、単に:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView setBackgroundImage:forState:]: unrecognized selector sent to instance 0x16c570' 

それは達成することは可能です:

 [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal]; 

私は次の取得しますUIButtonを使用するか、元のボタンを削除して新しいボタンを作成するだけですか?

+0

setBackgroundImage:forState:が機能していないと言っていますか? – picciano

+0

@picciano - はい、私はエラーメッセージで更新しました。 –

+0

編集内容と元の質問は何ですか – Garoal

答えて

4

ここでは、メモリ管理の問題があります。キャッチされない例外によりに対してアプリ 'NSInvalidArgumentException'、理由を終了

*は: -

を '[UITableViewCellContentView setBackgroundImage:forState::]認識されていないセレクタがインスタンスに 0x16c570を送った' これはあなたのことを意味しthumbnailButtonUIButtonを指しているのではなく、UITableViewCellContentViewです。これは不適切な割り当てやUIButtonの割り当てが解除された場合に発生します(この場合は、ぶら下がったポインタがあります)。アナライザーを実行し、ボタンの使用を再確認してください。

UIButton buttonWithTypeは、自動リリースされたインスタンスを返すので、それを保持する必要があります。

2

UIButton class referenceには、方法setBackground:forState:を使用できることがわかります。

+0

これはまさに私がやっていることであり、うまくいきません。 –

1

これは正常に動作するはずです。私はボタンがカスタムボタンでなければならないと思う。

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
関連する問題