2011-01-11 12 views
3

私は3つのボタンを作成し、通常の状態と選択された状態の背景画像を設定しました。ボタンをクリックすると、選択した状態として1つのイメージが変更されました。しかし、テーブルビューをスクロールすると、選択された画像は保持されません(前の選択されたセル)。つまり、通常の状態になります。選択状態を維持するには、iPhoneのUIButtonをクリックしますか?

私のコードは、

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    likeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 

    UIImage *likeSelectedImage = [UIImage imageNamed:@"like.png"]; 

    //set image as background for button in the normal state 

    [likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal]; 

    [likeBtn addTarget:self action:@selector(likeAction:) forControlEvents:UIControlEventTouchUpInside]; 

    [cell.contentView addSubview:likeBtn]; 
} 

マイボタンのアクションがSO私の問題は、私はテーブルビューのセルをスクロールすると、画像の以前に選択された状態が保持されていない、ある、

-(void) likeAction : (id) sender 
{ 
    UIImage *likeSelectedImg = [UIImage imageNamed:@"like-selected.png"]; 

    UIImage *likeImg = [UIImage imageNamed:@"like.png"]; 

      if ([sender isSelected]) { 
       [sender setImage:likeImg forState:UIControlStateNormal]; 
       [sender setSelected:NO]; 
       }else { 
       [sender setImage:likeSelectedImg forState:UIControlStateSelected]; 
       [sender setSelected:YES]; 
      } 

} 

です。 cellForRowAtIndexメソッドが繰り返し呼び出されたので、私はテーブルをスクロールしました。自動的に"[likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal];"と設定されます。この問題を避けるには? だから私を助けてください? ありがとう!

+0

uは私はすべてのテーブルの行のために保留にすべてのボタンの状態をボタンを保存する方法を伝えることができますuの私はウルANSでパーとしても、コードを試してみたが、それは適切に動作していないとして、ハイテク私は同じ問題を抱えています。私は配列のボタン状態を保持する方法をしないでくださいコードでこれを行う方法を言うと、これは私がコードを保持するリンクですhttp://stackoverflow.com/questions/8294981/how-to-toggle-image-on-button-for -every-row-tableview cell-in-iphone – Rocky

+0

私は最後の3日から試してみてくださいそれは私のために働いていない私はURのリンクを昨夜取得し、私は試してみませんか私はあなたが私を助けることを望む任意の解決策を得ていません – Rocky

答えて

5

あなたはこれを見ています。リソース使用量を最小限に抑えるために、現在画面に表示されているテーブルセルのみがメモリに保持されることが保証されています。セルがオフスクリーンでスクロールされると、セルオブジェクトは、リストの他端に現れる新しいセルに使用するためにリサイクルされ、その状態を失うことが意図されている。

tableView: cellForRowAtIndexPath:にセルを返すようにコードを少し修正したと仮定していますが、あなたが投稿したスニペットのどこにでもその変数への参照はありません。これにより、ボタンを追加する前にセルをどのように取得しているのかわかりません。

あなたのコードがどのように動作するかについては、暗闇の中で刺すようなビットですが、ここでは状態を保持するために必要なことの概要を説明します。

  1. すべてのテーブル行のすべてのボタン状態を保持するNSArrayなどのコントローラレベルのストレージをいくつか作成します。 likeAction
  2. ボタンからなる行決定(それを作成するときに、おそらくボタンのタグプロパティに行番号を割り当てる)とtableView: cellForRowAtIndexPath:であなたにNSArray
  3. に対応する行の状態を更新するには、を使用してボタンを設定します指定されたindexPathのNSArrayからフェッチされた状態を使用して、正しいイメージを返します。
+0

ありがとう、詳細な説明は、 – Pugal

0

識別子を持つセルごとに 'reuseIdentifier'を使用できます。

cell = [[[ToDoSummaryTableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault reuseIdentifier:.<identifier>] autorelease]; 
1

上記一つは構文で正しくありません:

cell = [[[ToDoSummaryTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease]; 

各セルに一意の識別子を与え、それが動作するはずです。

「reuseidentifier」をXCode IOS APIで使用するサンプルコードを参照してください。設計パターンデータを表示するためのUITableViewの使用に

おかげで、 バーラト

0

上記のコードを再編集します。私はあなたを助けてくれることを願っています。pugal

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     likeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 

     UIImage *likeSelectedImage = [UIImage imageNamed:@"like.png"]; 

     //set image as background for button in the normal state 

     [likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal]; 
     [likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateHighlighted]; 

     [likeBtn addTarget:self action:@selector(likeAction:) forControlEvents:UIControlEventTouchUpInside]; 

     [cell.contentView addSubview:likeBtn]; 
} 
関連する問題