2012-01-15 4 views
0

私は3つの項目を持つテーブルビューを持っていますが、そのうちの1つはボタンの背後にあります。ボタンが選択されているとき、そのボタンを隠してその背後にあるアイテムを明らかにする。私はテーブルビューのセルを使用してテーブルの行を表示しています。隠す1つのボタンを選択すると、テーブルをスクロールすると、さらに多くのボタンが隠されます。ボタンの非表示は、現在のビューの表示可能な行内のある場所に基づいてボタンを隠すように見えます。特定の行のボタンを非表示にしようとしています。テーブルビューの行のボタンに何らかのインデックスを付けることはできますか?

ボタンを隠すコードを押すたびにNSLogに書き込むことができます。一度しか表示されませんが、テーブルをスクロールすると、ボタンの隠し属性が表示される他の行に適用されます。行53のボタンを選択すると、行53のボタンだけが非表示になり、120行テーブルの他の行のボタンは非表示になります。

誰も私がやろうとしていることは何ですか?私は何が起こっているのか理解するために何か助けていただければ幸いです。ありがとう。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *ElementCellIdentifier = @"ElementCellIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ElementCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ElementRowCell" 
               owner:self options:nil]; 
     if ([nib count] > 0) { 
      cell = self.tvCell; 
     } else { 
      NSLog(@"failed to load ElementRowCell nib file!"); 
     } 
    } 

    NSUInteger row = [indexPath row]; 

    UILabel *atomic_number = (UILabel *)[cell.contentView viewWithTag:1];        
    atomic_number.text = [NSString stringWithFormat:@"%d",elements_table[row].atomic_number]; 

    UILabel *element_name = (UILabel *)[cell.contentView viewWithTag:2]; 
    element_name.text = [NSString stringWithCString:elements_table[row].element_name]; 

    UILabel *element_symbol = (UILabel *)[cell.contentView viewWithTag:3]; 
    element_symbol.text = [NSString stringWithCString:elements_table[row].element_symbol]; 

    return cell; 
} 

- (IBAction)buttonPressed:(id)sender { 

NSLog(@"Getting to buttonPressed from row button"); 
UIButton *pressedButton = (UIButton *)sender; 
NSIndexPath *indexPath = [self.mainTableView indexPathForCell:  (UITableViewCell *)[sender superview]]; 
pressedButton.hidden = TRUE; 

}

+0

ないのはなぜあなたがこのような結果を得ていることを確認:if文そうのように、ボタンの非表示のプロパティを設定するtableView:cellForRowAtIndexPath:利用ANにスクロールしたとき、適切な状態を復元するために

- (IBAction)buttonPressed:(UIButton *)button{ if (![button isKindOfClass:[UIButton class]]) return; UIView *finder = button.superview; while ((![finder isKindOfClass:[UITableViewCell class]]) && finder != nil) { finder = finder.superview; } if (finder == nil) return; UITableViewCell *myCell = (UITableViewCell *)finder; NSIndexPath *indexPath = [self.mainTableView indexPathForCell:myCell]; [selectedIndexPaths addObject:indexPath]; button.hidden = TRUE; NSLog(@"IndexPathRow %d",indexPath.row); } 

。 'tableView:cellForRowAtIndexPath:'とボタンを隠すアクションメソッドを投稿してください。 – NJones

+0

私はこのフォーラムを初めて使いました。私はこのコメントフィールドの許容文字数を超えています。コードを投稿するにはどうしたらいいですか? – Rick

+0

質問を編集してコードを追加しました。あなたの質問のテキストのすぐ下に質問タグがあります。そのすぐ下に、編集リンクをクリックしてください。 – NJones

答えて

0

申し訳ありません。 何が起こっているのかは、その特定のテーブルビューのセルにボタンのインスタンスを隠していることです。問題は、別の行のデキューを取得したときに状態を復元するものがないことです。そして、あなたがそれを状態に戻すだけなら、あなたがクリックした行は忘れ去られます。 tableView:cellForRowAtIndexPath:に状態を適切に復元できるように、すでにクリックされている行を保存する必要があります。

私がこれを処理する方法は、NSMutableSet *selectedIndexPaths;と宣言されています。これを使用して、選択した行を保存します。次に、ボタンをクリックすると、そのindexPathをセットに追加します。

buttonPropertyName.hidden = ([selectedIndexPaths containsObject:indexPath]); 
+0

それは私がクリックするボタンを隠しますが、私はビューをスクロールすると、隠される他のボタンがあります。私が始めたところまでスクロールすると、隠されたボタンは隠されなくなりました。しかし、他のランダムなボタンがあります。非常に奇妙な。 – Rick

+0

ありがとうございました。私はそれを試してみましょう。残念ながら、私は今すぐに出発しなければならないでしょうし、今晩までこれに戻ることはできませんが、それが効くかどうかを知らせます。再度、感謝します。 – Rick

+0

indexPathForCellは既に宣言しておくべきですか?私は "宣言されていない"エラーが発生しています。 – Rick

関連する問題